int a=5;
printf("%d %d %d\n",a++,a++,++a);
Gcc上的输出: 7 6 8
有人可以解释一下答案。 如果这个问题已经重复,我很抱歉,但我无法找到它。
谢谢!
答案 0 :(得分:19)
行为未定义,因为增量运算符之间没有sequence points。
解释代码执行操作的原因是无意义的练习。您不应该编写具有未定义行为的代码,即使它似乎适合您。
要解决注释中提出的问题:comma operator确实充当了序列点,但这里的逗号不是逗号运算符。来自维基百科:
使用逗号标记作为运算符不同于它在函数调用和定义,变量声明,枚举声明和类似结构中的使用,它用作分隔符。