Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
wyrażenie warunkowe jest stałe
Uwagi
Wyrażenie sterujące instrukcji if lub while pętli daje w wyniku stałą. Ze względu na ich typowe idioatyczne użycie, począwszy od programu Visual Studio 2015 update 3, trywialne stałe, takie jak 1 lub true nie wyzwalają ostrzeżenia, chyba że są wynikiem operacji w wyrażeniu.
Jeśli wyrażenie while sterujące pętli jest stałą, ponieważ pętla kończy się w środku, rozważ zastąpienie while pętli pętlą pętlą for . Można pominąć inicjację, test zakończenia i przyrost for pętli pętli, co powoduje nieskończoność pętli, podobnie jak while(1), i można zamknąć pętlę z treści for instrukcji.
Przykłady
W poniższym przykładzie przedstawiono dwa sposoby generowania C4127 i pokazano, jak używać pętli for, aby uniknąć ostrzeżenia:
// C4127.cpp
// compile with: /W4
#include <stdio.h>
int main() {
if (true) {} // OK in VS2015 update 3 and later
if (1 == 1) {} // C4127
while (42) { break; } // C4127
// OK
for ( ; ; ) {
printf("test\n");
break;
}
}
To ostrzeżenie można również wygenerować, gdy stała czasu kompilacji jest używana w wyrażeniu warunkowym:
#include <string>
using namespace std;
template<size_t S, class T>
void MyFunc()
{
if (sizeof(T) >= S) // C4127. "Consider using 'if constexpr' statement instead"
{
}
}
class Foo
{
int i;
string s;
};
int main()
{
Foo f;
MyFunc<4, Foo>();
}