免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
211 [报告]
发表于 2012-09-29 16:07 |只看该作者
sacry 发表于 2012-09-29 16:01
回复 196# wwwsq



int i = 0;
int x = (++i = i++);   

这段代码是可以编译通过的。而且特定环境下有特定的结果。这不同于1/0

而且1/0也能读懂,因为这是除零错误,1/0的代码会做什么是能知道,而且可预期的。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
212 [报告]
发表于 2012-09-29 16:09 |只看该作者
回复 208# hbmhalley

所以难的不是": ?", "&&", "||", ",", 而是代码需要解决的问题本身。

懂splay我不认为就会被": ?", "&&", "||", ","个难住了。
不懂splay的人, 哪怕代码里一个": ?", "&&", "||", ","都没有, 他也还是不懂。

论坛徽章:
0
213 [报告]
发表于 2012-09-29 16:10 |只看该作者
hbmhalley 发表于 2012-09-29 16:05
别吵了, 我插一句
本菜就一学生狗, 不懂项目
好久以前也不懂标准 更不懂 ub 云云



这是正常的态度。那种不知道何年哪月积累出来的晦涩代码,怎么可能都读懂?

我们能做的是尽量把那些晦涩的代码都变得浅显易懂。

真的没有什么事情是非要晦涩的代码才能做的。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
214 [报告]
发表于 2012-09-29 16:12 |只看该作者
wwwsq 发表于 2012-09-29 16:10
这是正常的态度。那种不知道何年哪月积累出来的晦涩代码,怎么可能都读懂?

我们能做的是尽量把那些晦涩的代码都变得浅显易懂。

真的没有什么事情是非要晦涩的代码才能做的。


"? :", "&&", "||", ",", 哪一个晦涩? 你自己从来没写过?
晦涩的(以及错误的)代码"++i = i++"只有你一个人在提。

论坛徽章:
0
215 [报告]
发表于 2012-09-29 16:15 |只看该作者
本帖最后由 sacry 于 2012-09-29 16:16 编辑

回复 211# wwwsq


    这代码c也能编译通过?!


1/0无视吧,其实本来想说数学意义上的1/0,
问谁都不能给出“正确”答案,但是不代表别人不知道“这东西目前没答案”这个答案,因为它是个“未定义行为”。


--
我擦,打字各种手滑,
还好没什么大不了的东西,编辑下应该也没啥问题@@

论坛徽章:
0
216 [报告]
发表于 2012-09-29 16:18 |只看该作者
OwnWaterloo 发表于 2012-09-29 16:12
"? :", "&&", "||", ",", 哪一个晦涩? 你自己从来没写过?
晦涩的(以及错误的)代码"++i = i++"只有 ...



if (expr_a || expr_b)而且在expr里面赋值,这种代码我真的很少写,应该是几乎没写过。

我认为这样的代码就是晦涩的。写出这样晦涩的代码的人,就是水平次。

看不懂晦涩的代码不重要,因为晦涩的代码本来就不是给人看的。测试验证之后,找个机会重构掉才是正经。没机会重构,就写点文档描述一下,免得后人也撞墙。


论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
217 [报告]
发表于 2012-09-29 16:18 |只看该作者
sacry 发表于 2012-09-29 16:15
这代码c也能编译通过?!


所以C语言的优势之一就是能拉开水平层次啊。


sacry 发表于 2012-09-29 16:15
1/0无视吧,其实本来想说数学意义上的1/0,
问谁都不能给出“正确”答案,但是不代表别人知道“这东西目前没答案”这个答案,因为它是个“未定义行为”。


如果他还残留有这么一点逻辑思考能力,也不至于反复自己扇自己脸了。

论坛徽章:
0
218 [报告]
发表于 2012-09-29 16:20 |只看该作者
sacry 发表于 2012-09-29 16:15
回复 211# wwwsq



所谓“未定义行为”,只是标准里面未定义而已,实际上编译器常常都会有个具体实现。

比如x = (++i = i++)在g++编译的时候,就会有一个确定的执行逻辑。


论坛徽章:
0
219 [报告]
发表于 2012-09-29 16:21 |只看该作者
OwnWaterloo 发表于 2012-09-29 16:18
所以C语言的优势之一就是能拉开水平层次啊。



一段代码会做什么你都不知道,还在那里说自己看懂了,你不觉得脸红吗?


论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
220 [报告]
发表于 2012-09-29 16:24 |只看该作者
wwwsq 发表于 2012-09-29 16:18
if (expr_a || expr_b)而且在expr里面赋值,这种代码我真的很少写,应该是几乎没写过。

我认为这样的代码就是晦涩的。写出这样晦涩的代码的人,就是水平次。

嗯, apr, glibc, sgi ... 他们水平都次。



wwwsq 发表于 2012-09-29 16:18
看不懂晦涩的代码不重要,因为晦涩的代码本来就不是给人看的。测试验证之后,找个机会重构掉才是正经。没机会重构,就写点文档描述一下,免得后人也撞墙。

分不清符合C要求的代码与不符合C要求的代码, 这是一次。
统一将他们称为晦涩, 这是二次。
让不符合C要求的代码产生了, 这是三次。
没能力鉴别,没有选择权避开那样代码, 这是四次。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP