此代码的预期输出

The*_*tig 5 c gcc increment

int a=5;
printf("%d %d %d\n",a++,a++,++a);
Run Code Online (Sandbox Code Playgroud)

Gcc输出:7 6 8

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

谢谢!!

Mar*_*ers 19

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

解释为什么代码执行它所做的是一个毫无意义的练习.您不应编写具有未定义行为的代码,即使它似乎适合您.

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

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

  • @The Stig:首先,这是因为代码在序列点之间不止一次地修改了"a".其次,逗号运算符确实有一个序列点,但函数调用中的逗号不是逗号运算符.令人困惑,但确实如此. (3认同)