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