C 和 Java 中的后缀和前缀运算符产生不同的结果

Postfix and prefix operators in C and Java producing different results

我认为基本算术运算符在大多数语言中具有相同的优先级。但是对于下面的代码片段-

int a = 5;
a = --a + a++;
//print a

C 编译器 (GNU GCC) 给我的结果是 9,而在 java 中我得到 8。这是怎么回事? 根据我的说法应该是 8 ( 4 + 4 )

a = --a + a++;

这会在 C 中调用 未定义的行为

C99 §6.5: “2. Between the previous and next sequence point an object shall have its stored value modified at most once by the evaluation of an expression. Furthermore, the prior value shall be read only to determine the value to be stored.”

在这里,您在上一个和下一个 sequence point 之间更改 a 的值两次,因此结果可以是任何值。