-2

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

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

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

4

1 回答 1

3
a = --a + a++;

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

C99 §6.5:“2。在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的评估修改一次。此外,应仅读取先验值以确定要存储的值。”</p>

a在这种情况下,您在 pervious 和 next 之间更改两次值sequence point,因此结果可能是任何东西。

于 2015-08-15T10:24:18.690 回答