VC与TC对同一程序编译出不同结果,怎么回事?

/*测试自加自减运算优先级*//*VC++6.0编译*/#include <stdio.h>#include <math.h>#include <iostream.h>#include <conio.h>void main(){ int x=5; long y1,y2,y3,y4; y1=(x++)+(x--)+(++x)+(--x); x=5; y2=(x--)+(x++)+(--x)+(++x); x=5; y3=(++x)+(--x)+(x++)+(x--); x=5; y4=(--x)+(++x)+(x--)+(x++); cout<<"y1="<<y1<<endl; cout<<"y2="<<y2<<endl; cout<<"y3="<<y3<<endl; cout<<"y4="<<y4<<endl; getch();}RESULT>>y1=21y2=19y3=20y4=20--------------------------/*测试自加自减运算优先级*//*TC2.0编译*/#include <stdio.h>#include <math.h>void main(){ int x=5; long y1,y2,y3,y4; y1=(x++)+(x--)+(++x)+(--x); x=5; y2=(x--)+(x++)+(--x)+(++x); x=5; y3=(++x)+(--x)+(x++)+(x--); x=5; y4=(--x)+(++x)+(x--)+(x++); printf("y1=%ld尀ny2=%ld尀ny3=%ld尀ny4=%ld尀n",y1,y2,y3,y4); printf("Complet>>>"); getch();}RESLUT>>y1=20.000y2=20.000y3=20.000y4=20.000呵呵,好眼力,我第一次运行的时候用的是实型.应该是:y1=20y2=20y3=20y4=20有看法,或者考虑方向的都多多发言啊,兄弟在这里谢谢了.
2026年09月24日 03:32
有1个网友回答
网友(1):

不会吧?居然还打印出小数点来?还精确到三位小数?那都是长整数啊!

严格按照C/C++的求值顺序演算你的如下表达式
x=5; y1=(x++)+(x--)+(++x)+(--x);
x=5; y2=(x--)+(x++)+(--x)+(++x);
x=5; y3=(++x)+(--x)+(x++)+(x--);
x=5; y4=(--x)+(++x)+(x--)+(x++);
可以得到
y1=5+6+6+5=22
y2=5+4+4+5=18
y3=6+5+5+6=22
y4=4+5+5+4=18
与你的两种实际计算结果都不同。这只可能是编译器“优化”的结果。而优化本身并没有标准的规定方法,因此两种编译器又产生了区别。你可以在编译时关闭优化开关,我估计两种编译器都会产生我演算出来的理论值了。