Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
a expressão condicional é constante
Observações
A expressão controladora de uma if instrução ou while loop é avaliada como uma constante. Devido ao seu uso idiomático comum, a partir da atualização 3 do Visual Studio 2015, constantes triviais como 1 ou true não acionam o aviso, a menos que sejam o resultado de uma operação em uma expressão.
Se a expressão de controle de um while loop for uma constante porque o loop sai no meio, considere substituir o while loop por um for loop. Você pode omitir a inicialização, o teste de término e o incremento do ciclo de um for loop, o que faz com que o loop seja infinito, assim como while(1), e pode sair do ciclo do corpo da instrução for.
Examples
O exemplo a seguir mostra duas maneiras como 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>();
}