为什么要写成if(1==i)而不是if(i==1)

作者在 2011-09-20 11:06:57 发布以下内容
看郝斌老师的视频,经常会提示if(1==i)要比if(i==1)规范。虽然照做却并不知其所以然。今天偶然看到坛友在一篇回复中谈及此问题,恍然大悟
/*时间:2011年9月20日11:02:56*/
# include <stdio.h>
void main()
{
    int i;
    if (i=0)                //当if后面括号里的是类似赋值语句的表达式时,if判断的是赋值后,等号左边的变量是否为真
        printf("i=0\n");    //这里 赋值为0,等号左边的i变量为假,所以,printf语句不会执行
    if (i=1)                
        printf("i=1\n");    //当被赋值为1时,i变量为真,这里会输出i=1
    if (i=2)                
        printf("i=2\n");    //当然,被赋值为其余非0的数时,i变量也为真,这里会输出i=2
    if (i=2)                //这里还有个问题,i是不是真的被赋值了呢?
        printf("i=%d\n",i);    //这里也输出了i=2,说明i确实被赋值了
    if (i==2)                //其实大多数情况下,我们实际想真正判断的是i是否等于2的情况,所以需要特别注意==与=的区别
        printf("i=%d\n",i); //这里因为之前的语句,i确实被赋值为了2,所以本条语句会执行,输出i=2
    if (2==i)                //终于到这种写法了,郝斌老师视频里经常提示的规范写法
        printf("i=%d\n",i);
//    if (2=i)                //为什么要写成上面那样呢,就是因为这样写如果不小心漏掉一个=,编译时会报错error C2106: '=' : left operand must be l-value
        printf("i=%d\n",i);                    
}
原帖地址:http://bbs.bccn.net/thread-350308-1-1.html 第10楼
默认分类 | 阅读 2733 次
文章评论,共11条
王点口
2011-09-20 13:25
1
GOOD 很好的细节
暗尘
2011-09-20 15:07
2
很好
embed_xuel
2011-09-21 00:03
3
呵呵,原来是我那个帖子
edwardflee(作者)
2011-09-21 08:24
4
<div class="quote"><span class="q"><b>embed_xuel</b>: 呵呵,原来是我那个帖子</span></div>嘻嘻,是呢,要多谢解惑呢
embed_xuel
2011-09-21 13:35
5
别客气,只是恰好知道有这个事
hxq3721
2011-09-23 01:15
6
<img src="image/face/2.gif" class="face">
实数虚数
2011-09-25 11:30
7
恩,这样可以自动检查到出错的地方
jeanine123
2011-10-13 08:12
8
这次好好看了一遍这个帖子,深有感触,细节真的很重要。<img src="image/face/2.gif" class="face">
A13433758072
2011-10-18 22:51
9
看个人&nbsp; &nbsp;我觉得 虽if(1==i)要比if(i==1)规范,但 看 的 人 很难受
embed_xuel
2011-10-18 22:59
10
等你定位问题定位了好久,发现是==写成了=,你就不觉得难受了
Alphalab
2011-10-20 15:46
11
这样写可以在编译的时候及时发现错误,防止把if( i == 1 ),写成if( i = 1 ).写为if( i = 1 ), 编译时不会报错,但运行时结果就不对了。 呵呵,戴特尔的书上说的,我这是现学现卖。
游客请输入验证码
最新评论