Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
conditional expression is constant
Remarks
The controlling expression of an if
statement or while
loop evaluates to a constant. Because of their common idiomatic usage, beginning in Visual Studio 2015 update 3, trivial constants such as 1 or true
do not trigger the warning, unless they are the result of an operation in an expression.
If the controlling expression of a while
loop is a constant because the loop exits in the middle, consider replacing the while
loop with a for
loop. You can omit the initialization, termination test and loop increment of a for
loop, which causes the loop to be infinite, just like while(1)
, and you can exit the loop from the body of the for
statement.
Example
The following sample shows two ways C4127 is generated, and shows how to use a for loop to avoid the warning:
// 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;
}
}
This warning can also be generated when a compile-time constant is used in a conditional expression:
#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>();
}