易码技术论坛

 找回密码
 加入易码
搜索
查看: 847344|回复: 20

[教程] 副作用与序列点

[复制链接]
发表于 2006-8-29 16:38:15 | 显示全部楼层
在一个表达式中,不要对同一变量进行2次以上的修改,否则就是不符合标准的,结果取决于编译器。
永远不要写这样的愚蠢代码:(i++)+(i++),除非你只打算永远用同一编译器编译它。
发表于 2006-8-29 17:44:23 | 显示全部楼层
同意,最讨厌见这种恶心的代码...
发表于 2006-8-29 17:47:38 | 显示全部楼层
二级常考题...
发表于 2006-8-29 18:18:47 | 显示全部楼层
呵呵,明白了......
发表于 2006-8-29 18:48:40 | 显示全部楼层
引用第3楼yzk03702006-08-29 17:47发表的“”:
二级常考题...

中国的什么考试不BC啊~
过级靠喊国外高手们考,没准他们都会挂掉。。。
发表于 2006-8-29 18:57:51 | 显示全部楼层
我们SQL的老师去带过一个班的课,课程讲的DBMS是老师在当时的10年前就不用了的。
发表于 2006-8-29 20:17:28 | 显示全部楼层
收获不少哈
 楼主| 发表于 2006-8-29 20:39:50 | 显示全部楼层
如果哪个变态老师再问i+++i++的结果是什么?
告诉他:结果不确定!
发表于 2006-8-29 21:03:17 | 显示全部楼层
引用第8楼leesoft2006-08-29 20:39发表的“”:
如果哪个变态老师再问i+++i++的结果是什么?
告诉他:结果不确定!
那时肯定的....到底那+++是
+ ++ 还是++ +
谁也说不清楚
 楼主| 发表于 2006-8-29 21:20:02 | 显示全部楼层
楼上要好好学习哦。
编译器会尽量匹配更多的字符,所以:
i+++i++永远等价于(i++)+(i++),而不会是(i)+ ++i++
发表于 2006-8-29 21:24:45 | 显示全部楼层
谢谢lee的指教....
尽量匹配更多的字符是什么意思?
 楼主| 发表于 2006-8-29 21:30:19 | 显示全部楼层
就是说,编译器看到+后,会再看下一个字符是否是+,如果是,编译器会当作++处理,而不会被当做+ +。
所以a++5的写法会被编译器当作a++ 5,而不是a+ +5
发表于 2006-8-29 21:32:31 | 显示全部楼层
那么如果要实现
i+(++i)就一定要加括号了?

那个从左向右和从右向左运算是怎么回事?
发表于 2006-8-30 01:29:02 | 显示全部楼层
引用第13楼Still42006-08-29 21:32发表的“”:
那么如果要实现
i+(++i)就一定要加括号了?

那个从左向右和从右向左运算是怎么回事?
反一下: ++i+i
 楼主| 发表于 2006-8-30 14:25:40 | 显示全部楼层
如果要实现
i+(++i)就一定要加括号了?

不用,这样就行:
i+ ++i
发表于 2006-8-30 18:06:22 | 显示全部楼层
除了为了优化外,我是不会这样使用++和--参与运算的.
发表于 2006-8-30 19:30:37 | 显示全部楼层
mfc 和c#.net算出的(i++)+(i++)+(i++)的确是不一样的
c#是从左向右算,LavaX也是...取决于编译器本来就无所谓对错的....
看考题的范围了,比如<<C语言>>什么的....

若没指定课程范围,肯定是不确的....相当没有意义的题...
即使为了优化这么写了,也得加注释...否则总有一天会吃苦头...
 楼主| 发表于 2006-8-30 19:52:43 | 显示全部楼层
hehe
对于(i++)+(i++)+(i++)
有的编译器会处理成:每引用一次i的值后i立即加1,表达式的值就是3i+3
有的编译器会处理成:先计算i+i+i,最后i+3,表达式的值就是3i
这两种计算方法都是ANSI C标准允许的(可能还有别的实现方式)。
之所以标准不对具体实现过程做硬性规定,是为了给编译器更大自由,以利于产生优化代码。
为了写出可以移植的代码,你需要做的就是避免出现这种愚蠢代码。
发表于 2006-9-21 08:49:13 | 显示全部楼层
引用第10楼leesoft2006-08-29 21:20发表的“”:
楼上要好好学习哦。
编译器会尽量匹配更多的字符,所以:
i+++i++永远等价于(i++)+(i++),而不会是(i)+ ++i++
这个就是右结合的规则吧!!
 楼主| 发表于 2006-9-21 14:17:47 | 显示全部楼层
不是。
这是最多匹配原则
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-8-24 02:26 , Processed in 0.012515 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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