Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
int a=5; printf("%d %d %d\n",a++,a++,++a);
Gcc 上的输出:7 6 8
有人可以解释一下答案。如果这个问题被重复了,我很抱歉,但我找不到它。
谢谢!!
该行为未定义,因为增量运算符之间没有序列点。
解释为什么代码做它所做的事情是一个毫无意义的练习。你不应该编写具有未定义行为的代码,即使它看起来对你有用。
为了解决评论中提出的观点:逗号运算符确实充当序列点,但是这里的逗号不是逗号运算符。来自维基百科:
逗号标记作为运算符的使用不同于它在函数调用和定义、变量声明、枚举声明和类似构造中的使用,在这些构造中它充当分隔符。