C语言 谁能帮我看一下这道题 为什么s2等于28

来源:百度知道 编辑:UC知道 时间:2024/05/07 00:59:22
#define MIN(x,y) (x)>(y)?(x):(y)
#define T(x,y,r) x*r*y/4
main()
{int a=1,b=3,c=5,s1,s2;
s1=MIN(a=b,b-a);
s2=T(a++,a*++b,a+b+c);
printf("%d,%d\n",s1,s2);
getch();}

T(a++,a*++b,a+b+c);编译成a++*a+b+c*a*++b/4
a++*a+b+c*a*++b/4因为a++是后置++运算因此为3,b是前置运算为4,表达式为3*3+4+5*3*4/4=28,但是这个题目很无聊,在vc6中是27计算方式是3*3+3+5*3*4/4=27,这个题目和编译器的关系很大.

s2= a++*a+b+c*a*++b/4
先算b++;b=4;a=3;c=5;
所以s2=28;
要想得到正确 的结果
#define T(x,y,r) (x)*(r)*(y)/4