int a = 0; a = (++a) + (++a) + (++a) + (++a);为什么 a 最终等于 11

2015 年 2 月 9 日
 igboy
int a = 0; 
a = (++a) + (++a) + (++a) + (++a);
printf("%d\n", a);

gcc version: 4.9.2

不太懂为什么 a 会等于 11?能分析一下吗?

4412 次点击
所在节点    C
68 条回复
hooluupog
2015 年 2 月 10 日
Go直接报错~~
onemoo
2015 年 2 月 10 日
楼上很多人都说了,这个行为是undefined。
用这几个关键字去google吧:副作用(side effect)、序列点(sequence point)

虽然是未定义的,但如果你想知道你的gcc是用什么样的实现来得到这个结果的 ,请查看汇编:objdump -d
Mysdes
2015 年 2 月 10 日
@vzch 嗯,这头像看起来和轮子小哥有点像。

facat
2015 年 2 月 10 日
标准里面没有规定++运算符的优先级,是编译器自己实现的。
lalalanet
2015 年 2 月 10 日
@facat 是这样的,这是分标准表达式,每个编译器怎么处理都是随意的。这种代码写出来就是找死。
BGLL
2015 年 2 月 10 日
@b821025551b
难怪,那么多人喷谭浩强....
onlyice
2015 年 2 月 10 日
求不问这种问题。。
自己搜一下就知道了。。
vwok
2015 年 2 月 10 日
对于扯这种问题的,可以把四个括号去掉让他在算算等于多少

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/169679

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX