C 此代码的预期输出

C 此代码的预期输出,c,gcc,increment,C,Gcc,Increment,Gcc上的输出: 7 6 8 有人能解释一下答案吗。 如果这个问题被重复,我很抱歉,但我找不到它 谢谢 该行为未定义,因为增量运算符之间没有关联 解释代码为什么这样做是毫无意义的。您不应该编写具有未定义行为的代码,即使它似乎适合您 为了解决注释中提出的问题:的确,充当序列点,但此处的逗号不是逗号运算符。来自维基百科: 逗号标记作为运算符的使用不同于它在函数调用和定义、变量声明、枚举声明和类似构造中作为分隔符的使用 两个词:未定义的行为是因为我们在一条语句中有多个增量操作吗?在这种情况下,“ope

Gcc上的输出: 7 6 8

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


谢谢

该行为未定义,因为增量运算符之间没有关联

解释代码为什么这样做是毫无意义的。您不应该编写具有未定义行为的代码,即使它似乎适合您

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

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


两个词:未定义的行为是因为我们在一条语句中有多个增量操作吗?在这种情况下,“opeartor”也不能正确执行。@Stig:首先,这是因为代码在序列点之间多次修改
a
。其次,逗号运算符确实有一个序列点,但函数调用中的逗号不是逗号运算符。令人困惑,但却是真的。@David Thornley:是的。我在回答中加了这个。谢谢。我的主要困惑是“,”作为序列点。因此,在类似func(foo(),bar())的代码中,“,”逗号运算符不是序列点,但在类似if(foo(),bar())的代码中,逗号充当序列point@The斯蒂格:这是正确的,只是有点迂腐:在第一个例子中,逗号不是“逗号运算符”,它只是一个逗号标记。
int a=5;
printf("%d %d %d\n",a++,a++,++a);