Avviso del compilatore (livello 4) C4127

espressione condizionale costante

Osservazioni:

L'espressione di controllo di un'istruzione if o di un ciclo while restituisce una costante. A causa dell'utilizzo idiomatico comune, a partire da Visual Studio 2015 update 3, costanti semplici come 1 o true non attivano l'avviso, a meno che non siano il risultato di un'operazione in un'espressione.

Se l'espressione di controllo di un while ciclo è una costante perché il ciclo viene chiuso al centro, è consigliabile sostituire il while ciclo con un for ciclo. È possibile omettere l'inizializzazione, il test di terminazione e l'incremento del ciclo di un for ciclo, che fa sì che il ciclo sia infinito, proprio come while(1), ed è possibile uscire dal corpo dell'istruzione for .

Esempio

L'esempio seguente illustra due modi in cui viene generato C4127 e illustra come usare un ciclo for per evitare l'avviso:

// 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;
   }
}

Questo avviso può essere generato anche quando viene usata una costante in fase di compilazione in un'espressione condizionale:

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