此代码的预期输出

时间:2010-07-15 20:20:46

标签: c gcc increment

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

Gcc上的输出: 7 6 8

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

谢谢!

1 个答案:

答案 0 :(得分:19)

行为未定义,因为增量运算符之间没有sequence points

解释代码执行操作的原因是无意义的练习。您不应该编写具有未定义行为的代码,即使它似乎适合您。

要解决注释中提出的问题:comma operator确实充当了序列点,但这里的逗号不是逗号运算符。来自维基百科:

  

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