Partager via


Avertissement du compilateur (niveau 4) C4127

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