我用 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);
}
最佳答案
int b = (++a) + (++a) + (++a);
这是 undefined behavior在 C 中,这意味着它可以输出 21、22、42,它可以崩溃或做任何它想做的事情。这是 UB,因为标量对象的值在同一表达式中多次更改而无需干预 sequence points
行为是用Java定义的,因为它有更多的序列点。 Here's an explanatory link
关于java - 为什么相同的代码在 Java 中的工作方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5244607/