当“while” - C中使用常量时,为什么MSVC会生成警告C4127

时间:2010-08-16 05:33:11

标签: c visual-c++ compiler-warnings c4127

代码,

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

MSVC生成以下警告。

warning C4127: conditional expression is constant
该警告的

MSDN页面建议使用for(;;)代替while(1)。我想知道for(;;)给出的优势是什么以及它为什么会警告while中的常量用法?

我应该在GCC上使用什么标志来获得相同的警告?

2 个答案:

答案 0 :(得分:14)

常量条件通常就足够了。考虑一下:

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

如果k是带符号的int,则条件k>=0是有意义的,但对于无符号则不然。粗心的开发人员忘记了k被声明为无符号,并且他/她会使用它,好像它可用作负数。编译器试图提供帮助并向您发出警告,并且while(1)会使编译器陷入同一个问题类。 for(;;)更可取,因为它明确地表示`永远循环

答案 1 :(得分:8)

for(;;)while (true)的不同之处在于前者是一个特殊情况定义是一个无限循环,而后者则是一种滥用说“真的,总是“。

警告出现是因为当you don't want them非常糟糕时无限循环,所以它警告你在第一个标志处可能有一个。但是通过使用for(;;),你几乎明确地说“永远地循环”,并且没有什么值得警告的。

我不认为海湾合作委员会有同等的警告。