免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: safedead
打印 上一主题 下一主题

[C] [C实现]条件表达式的执行顺序是固定的吗? [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
41 [报告]
发表于 2012-09-29 15:29 |显示全部楼层
wwwsq 发表于 2012-09-29 15:25
你回过头去看看八楼的帖子,看看你在反对什么,在支持什么。


wwwsq 发表于 2012-09-28 20:59
楼上几位的解释都是对的。

不过在实践中,比较推荐的做法是不要在 if (expr_a || expr_b) 的时候做什么实质性的‘写’操作。因为那样的代码读起来太累,容易隐藏bug。

比如楼主遇到的疑惑和担心,其实是完全可以避免的。之所以会有这麻烦,就是当初写代码的人水平太次,或者太爱卖弄。

建议楼主在有机会的时候,把那块代码改写一下,写成任何人都不会担心的代码,写成不会有任何迷惑的代码。


OwnWaterloo 发表于 2012-09-28 22:44
回复 16# wwwsq

你这逻辑我不懂,我懂的逻辑是:看不懂别人的代码就是水平次。



PS: "++i = i++"的结果从你提出来时看懂了, 没有一个统一的结果就是它的结果。  你不认为这是一个结果那就是你水平次的表现。
再PS: 你还可以看看158楼, 看看是怎么总结的。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
42 [报告]
发表于 2012-09-29 15:30 |显示全部楼层
wwwsq 发表于 2012-09-29 15:28
能用20%的大家都了解的语言特性,实现一个强大的软件,这才是高手。

你去看看nginx的代码,里面几乎没有任何奇技淫巧。就是平实的代码。写好了,就是伟大的软件。


wwwsq 发表于 2012-09-28 20:59
不过在实践中,比较推荐的做法是不要在 if (expr_a || expr_b) 的时候做什么实质性的‘写’操作。因为那样的代码读起来太累,容易隐藏bug。



如果我在nginix里面找出 "||",你打算怎么收场?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
43 [报告]
发表于 2012-09-29 15:32 |显示全部楼层
wwwsq 发表于 2012-09-29 15:27
你不知道那句话会怎么执行,还磨磨唧唧不承认。

有些代码就是没人看得懂的。(看得懂的那是妖怪,清楚所有编译器的实现细节)



我能确认自己不知道"++i = i++"怎么执行,就是我看懂了它的标志。 我不指望你能理解这里面的逻辑。
只是为了避免你诬陷我而已。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
44 [报告]
发表于 2012-09-29 15:33 |显示全部楼层
wwwsq 发表于 2012-09-29 15:26
"x = (++i = i++)" 你看得懂,你能知道这句话要做什么吗?


你问这样的问题就已经说明你水平次了。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
45 [报告]
发表于 2012-09-29 15:37 |显示全部楼层
wwwsq 发表于 2012-09-29 15:36
你根本就不知道++i = i++那段代码在做什么。你只是用ub在搪塞而已。


这就是你我的差距。 我认为我看懂了, 你认为我仅仅是在搪塞。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
46 [报告]
发表于 2012-09-29 15:47 |显示全部楼层
wwwsq 发表于 2012-09-29 15:40
你不知道那段代码在做什么。什么叫做不知道?

OwnWaterloo 发表于 2012-09-29 15:09
你又开始歪曲了。
你将": ?"与"++i = i++"统称垃圾代码。
而我不是, 就像前面说的, ": ?" 不是, "++i = i++" 是。
看不懂前者是水平次, 分不清两者依然是水平次。


OwnWaterloo 发表于 2012-09-29 15:16
这就是一种结果。能确认自己不知道也是一种知道。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
47 [报告]
发表于 2012-09-29 15:54 |显示全部楼层
wwwsq 发表于 2012-09-29 15:46
UB在学术上是个结果,但是对于code review来说UB并不是一个结果。UB等于是说不知道。

代码是做什么的都不知道,怎么能说是看懂了?

真看懂了不是说UB,而是说这段代码在centos6.1和gcc 4.1下面,会执行什么运算,得到什么结果。这才叫看懂了。



你大可到处这么宣传,哦,不,我请你一定要这么宣传:
1. OwnWaterloo确认这代码没有统一的执行方式
2. wwwsq知道在centos6.1和gcc 4.1下面的执行结果
3. 因此OwnWaterloo没有看懂这代码而wwwsq看懂了。OwnWaterloo水平次。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
48 [报告]
发表于 2012-09-29 15:56 |显示全部楼层
wwwsq 发表于 2012-09-29 15:46
UB在学术上是个结果,但是对于code review来说UB并不是一个结果。UB等于是说不知道。

代码是做什么的都不知道,怎么能说是看懂了?

真看懂了不是说UB,而是说这段代码在centos6.1和gcc 4.1下面,会执行什么运算,得到什么结果。这才叫看懂了。



对代码"++i = i++":
1. OwnWaterloo确认这代码没有统一的执行方式
2. wwwsq知道在centos6.1和gcc 4.1下面的执行结果
3. 因此OwnWaterloo没有看懂这代码而wwwsq看懂了。OwnWaterloo水平次。

你大可到处这么宣传,哦,不,我请你一定要这么宣传,并且是原封不动,断章取义不算数。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
49 [报告]
发表于 2012-09-29 15:58 |显示全部楼层
wwwsq 发表于 2012-09-29 15:56
能否看懂那种垃圾代码,确实和做项目关系不大。

在这一点上我们是一致的。

waterloo同学认为,必须能看懂所有垃圾代码,才算是水平高。

可是呢,我写了一段垃圾代码出来,他就看不明白那段代码到底在做什么。


又乱说。

>> waterloo同学认为,必须能看懂所有垃圾代码,才算是水平高。

我能看懂的比你多,所以我水平比你高。 "所有"、"垃圾代码"都是你自己添加的。


>> 可是呢,我写了一段垃圾代码出来,他就看不明白那段代码到底在做什么。

1. 你自己也知道这是垃圾代码了。
2. 我看懂了,只是你不承认.

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
50 [报告]
发表于 2012-09-29 15:59 |显示全部楼层
wwwsq 发表于 2012-09-29 15:57
那段代码在很多环境下都是可以编译通过的,而且在特定环境下也有特定的结果。


所以我和你境界都不一样。 你还停留在小陈的阶段。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP