Search code examples
cvisual-c++compiler-warningsc4127

Why MSVC generates warning C4127 when constant is used in "while" - C


For code,

while(1)
{
   /* ..... */
}

MSVC generates the following warning.

warning C4127: conditional expression is constant

MSDN page for the warning suggests to use for(;;) instead of while(1). I am wondering what advantage for(;;) is giving and why it warns for the constant usage in while?

What flag should I use on GCC to get the same warning?


Solution

  • Constant conditionals are often enough simply bugs. Consider this:

    unsigned k; 
    ...
    while (k>=0) 
    {
     ...
    }
    

    The condition k>=0 would make sense if k was a signed int, but not for unsigned. A careless developer forgets that k was declared unsigned and he/she would use it as if it was usable as a negative number. The compiler tries to be helpful and warn you about this and while(1) falls for the compiler into the same problem class. for(;;) is preferable because it unambiguously means `loop forever