c – 为“while(true)”发出编译器警告的意思是什么,而不是为“for(;;)”发出一个?

前端之家收集整理的这篇文章主要介绍了c – 为“while(true)”发出编译器警告的意思是什么,而不是为“for(;;)”发出一个?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我使用Visual C 9编译C代码时,“警告级别4”如下:
while( true ) {
   //loop body with break on certain condition
}

和以下内容

for( ; true; ) {
   //same loop body
}

两个触发器C4127:条件表达式是常量警告,但是如下:

for( ; ; ) {
   //same loop body
}

编译没有警告.

为什么这种差异,特别是在第二和第三种变体之间?

解决方法

原因很简单,虽然很愚蠢.

诊断无限循环很重要,但这可能不明显:

while(i >= 0) { --i; } // infinite if i unsigned

while(SOME_MACRO(i)) // err,depends on the expansion of macros

编译器的一个很大的特点就是产生一个重言式测试的警告,这是一个测试,总是真的或者总是假的,因为它来自宏扩展或从属上下文中并不明显.

似乎VC在这里推了一个太远,而不是考虑重复条件警告所有真实或虚假的条件,即使他们已经在代码中已经清楚地说明了.

猜你在找的C&C++相关文章