我想知道这个程序的输出是3 3 = 3
#include<stdio.h>
#include<conio.h>
main()
{
int a=2,b=3;
printf("%d %d=%d",a,b,a=b);
getch();
}
答案 0 :(得分:1)
函数参数的评估顺序是未指定 - 不能保证它们是从左到右,从右到左或任何其他顺序进行评估,所以我们无法保证在a
之前评估b
或a=b
。
但是您已经调用未定义的行为,因为您试图在没有插入序列点的情况下同时读取和修改a
的值;由于评估顺序未指定,因此不同平台,编译器,程序,优化设置等的结果将有所不同。未定义行为仅表示编译器不需要处理此案例以任何特定的方式,所以任何结果都是可能的,就语言而言,是正确的。