9

对于代码,

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

MSVC 生成以下警告。

warning C4127: conditional expression is constant

警告的MSDN页面建议使用for(;;)而不是while(1). 我想知道有什么好处for(;;),为什么它会警告不断使用 in while

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

4

2 回答 2

14

常量条件通常是足够简单的错误。考虑一下:

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

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

于 2010-08-16T05:37:14.587 回答
9

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

出现警告是因为当你不想要它们时无限循环非常糟糕,所以它警告你你可能在第一个标志处就有一个。但是通过使用for(;;),您几乎明确地说“永远循环”,并且没有什么需要警告的。

我认为 GCC 没有等效的警告。

于 2010-08-16T05:36:51.373 回答