Freigeben über


Compilerwarnung (Ebene 4) C4127

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>();
}