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