Partilhar via


Aviso do compilador (nível 4) C4127

a expressão condicional é constante

Comentários

A expressão controladora de uma instrução if ou um loop while é avaliada como uma constante. Devido ao uso de idioma comum, a partir da atualização 3 do Visual Studio 2015, constantes triviais como 1 ou true não disparam o aviso, a menos que sejam resultado de uma operação em uma expressão.

Se a expressão de controle de um loop while for uma constante porque o loop sai no meio, considere substituir o loop while por um loop for. Você pode omitir a inicialização, o teste de encerramento e o incremento de loop de um loop for, o que faz com que o loop seja infinito, assim como while(1), e você pode sair do loop a partir do corpo da instrução for.

Exemplo

O exemplo a seguir mostra duas maneiras pelas quais o C4127 é gerado, e mostra como usar um loop for para evitar o aviso:

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

Esse aviso também pode ser gerado quando uma constante de tempo de compilação é usada em uma expressão condicional:

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