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?
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