Sdílet prostřednictvím


Upozornění kompilátoru (úroveň 4) C4127

podmíněný výraz je konstantní.

Poznámky

Řídicí výraz if příkazu nebo while smyčky se vyhodnotí jako konstanta. Vzhledem k jejich běžnému idiomaticnímu použití, počínaje sadou Visual Studio 2015 Update 3, triviální konstanty, jako je 1, nebo true neaktivují upozornění, pokud nejsou výsledkem operace ve výrazu.

Pokud řídicí výraz while smyčky je konstanta, protože smyčka končí uprostřed, zvažte nahrazení while smyčky smyčkou for . Můžete vynechat inicializaci, test ukončení a zvýšení for smyčky smyčky, což způsobí, že smyčka bude nekonečná, stejně jako while(1)a můžete ukončit smyčku z textu for příkazu.

Příklad

Následující ukázka ukazuje dva způsoby generování C4127 a ukazuje, jak použít smyčku for, abyste se vyhnuli upozornění:

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

Toto upozornění lze také vygenerovat, když se v podmíněném výrazu používá konstanta kompilačního času:

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