加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 05:56:16 所属栏目:百科 来源:网络整理
导读:当我使用Visual C 9编译C代码时,“警告级别4”如下: while( true ) { //loop body with break on certain condition} 和以下内容: for( ; true; ) { //same loop body} 两个触发器C4127:条件表达式是常量警告,但是如下: for( ; ; ) { //same loop body}
当我使用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在这里推了一个太远,而不是考虑重复条件警告所有真实或虚假的条件,即使他们已经在代码中已经清楚地说明了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读