我在java和C中编写了以下代码。但这些程序的输出是不同的。 Java应用程序给出了21和C应用程序给出了22(我使用GCC编译器)。
你能描述一下吗?
这是JAVA代码。
class test
{
public static void main(String args[])
{
int a =5;
int b = (++a) + (++a) + (++a);
System.out.println(b);
}
}
这是C代码。
#include <stdio.h>
int main( int argc, const char* argv[] )
{
int a =5;
int b = (++a) + (++a) + (++a);
printf("%d \n",b);
}
答案 0 :(得分:34)
int b = (++a) + (++a) + (++a);
这是C中的undefined behavior,这意味着它可以输出21,22,42,它可以崩溃或做任何其他想做的事情。这是UB,因为标量对象的值在同一表达式中被多次更改而没有介入sequence points
行为在Java中定义,因为它有更多的序列点。 Here's an explanatory link
答案 1 :(得分:3)
在Java评估中left to right,结果是一致的。 6 + 7 + 8 == 21