无法理解程序的输出

时间:2014-04-28 16:45:28

标签: c

我想知道这个程序的输出是3 3 = 3

#include<stdio.h>
#include<conio.h>
 main()
{
int a=2,b=3;
printf("%d %d=%d",a,b,a=b);
getch();
}

1 个答案:

答案 0 :(得分:1)

函数参数的评估顺序是未指定 - 不能保证它们是从左到右,从右到左或任何其他顺序进行评估,所以我们无法保证在a之前评估ba=b

但是您已经调用未定义的行为,因为您试图在没有插入序列点的情况下同时读取和修改a的值;由于评估顺序未指定,因此不同平台,编译器,程序,优化设置等的结果将有所不同。未定义行为仅表示编译器不需要处理此案例以任何特定的方式,所以任何结果都是可能的,就语言而言,是正确的。