代码,
while(1)
{
/* ..... */
}
MSVC生成以下警告。
warning C4127: conditional expression is constant
该警告的 MSDN页面建议使用for(;;)
代替while(1)
。我想知道for(;;)
给出的优势是什么以及它为什么会警告while
中的常量用法?
我应该在GCC上使用什么标志来获得相同的警告?
答案 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(;;)
,你几乎明确地说“永远地循环”,并且没有什么值得警告的。
我不认为海湾合作委员会有同等的警告。