Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
l'expression conditionnelle est une constante
Notes
L’expression de contrôle d’une instruction if ou d’une boucle while correspond à une constante. En raison de leur utilisation idiomatique courante, à compter de Visual Studio 2015 update 3, constantes triviales telles que 1 ou true ne déclenchent pas l’avertissement, sauf si elles sont le résultat d’une opération dans une expression.
Si l’expression de contrôle d’une while boucle est une constante, car la boucle se ferme au milieu, envisagez de remplacer la while boucle par une for boucle. Vous pouvez omettre l’initialisation, le test d’arrêt et l’incrément de boucle d’une for boucle, ce qui entraîne l’infini, tout comme while(1), et vous pouvez quitter la boucle du corps de l’instruction for .
Examples
L’exemple suivant montre deux façons de générer C4127 et montre comment utiliser une boucle for pour éviter l’avertissement :
// 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;
}
}
Cet avertissement peut également être généré lorsqu’une constante au moment de la compilation est utilisée dans une expression conditionnelle :
#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>();
}