当在“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(;;) ,你几乎明确地说“永远地循环”,并且没有什么值得警告的。

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