对于代码,
while(1)
{
/* ..... */
}
MSVC 生成以下警告。
warning C4127: conditional expression is constant
警告的MSDN页面建议使用for(;;)
而不是while(1)
. 我想知道有什么好处for(;;)
,为什么它会警告不断使用 in while
?
我应该在 GCC 上使用什么标志来获得相同的警告?
对于代码,
while(1)
{
/* ..... */
}
MSVC 生成以下警告。
warning C4127: conditional expression is constant
警告的MSDN页面建议使用for(;;)
而不是while(1)
. 我想知道有什么好处for(;;)
,为什么它会警告不断使用 in while
?
我应该在 GCC 上使用什么标志来获得相同的警告?
常量条件通常是足够简单的错误。考虑一下:
unsigned k;
...
while (k>=0)
{
...
}
如果 k 是带符号的 int,则该条件k>=0
是有意义的,但对于无符号的则不是。粗心的开发人员忘记了 k 被声明为无符号并且他/她会使用它,就好像它可以用作负数一样。编译器试图提供帮助并警告您这一点, while(1)
并将编译器归入同一问题类别。for(;;)
更可取,因为它明确表示“永远循环”
for(;;)
并且while (true)
不同之处在于前者是定义为无限循环的特殊情况,而后者是一种滥用,说“真的,总是”。
出现警告是因为当你不想要它们时无限循环非常糟糕,所以它警告你你可能在第一个标志处就有一个。但是通过使用for(;;)
,您几乎明确地说“永远循环”,并且没有什么需要警告的。
我认为 GCC 没有等效的警告。