我在
java和C中编写了以下代码,但是这些程序的输出是不同的.
Java应用程序给了21和C应用程序给了22(我使用GCC编译器).
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