按照正常逻辑分析的话,答案确实是3,1,0,0
那么为什么编译后结果是3,3,0,0呢?
原因很简单,编译器对代码进行了优化,导致程序运行结果未定义。
计算a=b==c时,确实a=1。
重要的是下一步,a=b=c使得a=3。
那么上一步寄存器中存放的a值从1变成了3。最终一起输出了3,3,0,0
可以尝试加上关键字volatile int a=1,b=2,c=3 。禁止优化代码,再尝试一下,你将得到你想要的结果。
#include
int main(){
int a=1,b=2,c=3;
printf("%d %d %d %d\n",a=b=c,a,b,c);//3 1 2 3
printf("%d %d %d",a,b,c);//3 3 3,编译器的实现可能有差别,这种题目让他去死
return 0;
}