Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Bedingter Ausdruck ist konstant
Hinweise
Der Kontrollausdruck einer if -Anweisung oder while -Schleife wird in eine Konstante ausgewertet. Aufgrund ihrer allgemeinen idiomatischen Verwendung ab Visual Studio 2015 Update 3 werden triviale Konstanten wie 1 oder true nicht die Warnung ausgelöst, es sei denn, sie sind das Ergebnis eines Vorgangs in einem Ausdruck.
Wenn der steuernde Ausdruck einer while Schleife eine Konstante ist, da die Schleife in der Mitte beendet wird, erwägen Sie, die while Schleife durch eine for Schleife zu ersetzen. Sie können die Initialisierung, den Beendigungstest und die Schleife inkrementieren, for was bewirkt, dass die Schleife unendlich ist, genau wie while(1), und Sie können die Schleife aus dem Textkörper der for Anweisung beenden.
Examples
Das folgende Beispiel zeigt zwei Arten, wie C4127 generiert wird, und zeigt, wie Sie eine For-Schleife verwenden, um die Warnung zu vermeiden:
// 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;
}
}
Diese Warnung kann auch generiert werden, wenn eine Kompilierungszeitkonstante in einem bedingten Ausdruck verwendet wird:
#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>();
}