5
int a=5;
printf("%d %d %d\n",a++,a++,++a);

Gcc 上的输出:7 6 8

有人可以解释一下答案。如果这个问题被重复了,我很抱歉,但我找不到它。

谢谢!!

4

1 回答 1

19

该行为未定义,因为增量运算符之间没有序列点。

解释为什么代码做它所做的事情是一个毫无意义的练习。你不应该编写具有未定义行为的代码,即使它看起来对你有用。

为了解决评论中提出的观点:逗号运算符确实充当序列点,但是这里的逗号不是逗号运算符。来自维基百科:

逗号标记作为运算符的使用不同于它在函数调用和定义、变量声明、枚举声明和类似构造中的使用,在这些构造中它充当分隔符。

于 2010-07-15T20:21:56.917 回答