C 中的后缀增量和前缀运算符



我的问题灵感来自下面的代码

int a=4;
int d=(++a) + (++a);  // stored value 12
a=4;
int e=++a + a++;  //Actual stored value  11
a=4;
int f=a++ + a++;  //Actual stored value 9
a=4;
int g=a++ + ++a;  //Actual stored value 10

我已经看到后缀运算符的优先级不仅仅是前缀运算符。 因此

'd' in my opinion should be (5+6)
'e' in my opinion should be (6+4)
'f' in my opinion should be (4+5)
'g' in my opinion should be (4+6)

我正在使用 gcc 7.4.0

任何人都可以帮助如何推理不匹配的结果吗?

注意:存储表达式 (d,e,f,g( 的变量与表达式 (a( 中涉及的变量不同。

根据 C 语言标准,您使用"未定义的行为"作为括号中项目的评估操作顺序不保证。因此,int d=(++a) + (++a);的代码可以先执行两个增量,先进行a==6,然后再进行求和,从而产生d==12

这就是为什么您不应该使用此类代码结构,并且它们只出现在学校作业中的原因。

最新更新