查看: 359|回复: 2

[C/C++] 论a==b和b==a的区别

[复制链接]

0

技术

9

魅力

1

原创

版主

禁止访问

Rank: 7Rank: 7Rank: 7

积分
7674
人气
176
分享
52

最佳新人活跃会员

发表于 2023-1-18 20:14:17 | 显示全部楼层 |阅读模式
如题,今天看到一个开源项目:
[C] 纯文本查看 复制代码
if(NULL == obj)

编译的代码如下:
[C] 纯文本查看 复制代码
if(0 == obj)

那么聪明得小朋友(我)就会问了
已知a=b,那么b=a
那么,为什么要写NULL == obj,不写obj == NULL呢
奇奇怪怪的问题出现了

小菜鸡一枚~
Gitee主页:https://gitee.com/juruoqwq

0

技术

0

魅力

2

原创

初出茅庐

Rank: 2

积分
238
人气
18
分享
2
发表于 2023-1-19 22:18:41 | 显示全部楼层
传说中有个几百万美元的bug,差不多是这样的:

if (a == 0) 不小心写成了 if(a = 0) 于是a的值恒等于0,if后面的语句永远不会被执行。
于是人们想出了 if (0 == a)这样的写法。这样,如果不小心写成 if (0 = a) 就会引发编译错误,变量赋值给常量。

0

技术

6

魅力

1

原创

退休版主

禁止发言

Rank: 8Rank: 8

积分
6014
人气
174
分享
56

最佳新人活跃会员灌水之王

发表于 2023-1-20 14:04:44 | 显示全部楼层

确实没有区别,但是,如果你将if ( obj == NULL) 错写成if ( obj = NULL)它就变成了赋值语句,而不是判断语句了

一只压力超大的屑
我的博客:点此进入
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表