我认为基本算术运算符在大多数语言中具有相同的优先级。但是对于以下代码片段-
int a = 5;
a = --a + a++;
//print a
C 编译器(GNU GCC)给了我9
在 java 中得到的结果8
。这是怎么回事?据我说应该是 8 ( 4 + 4 )
我认为基本算术运算符在大多数语言中具有相同的优先级。但是对于以下代码片段-
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。在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的评估修改一次。此外,应仅读取先验值以确定要存储的值。”</p>
a
在这种情况下,您在 pervious 和 next 之间更改两次值sequence point
,因此结果可能是任何东西。