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:
The condition
k>=0would 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 andwhile(1)falls for the compiler into the same problem class.for(;;)is preferable because it unambiguously means `loop forever