main()
{
int a=1;
int sum;
sum=(a++)+a; /*a在这个表达式里还是都为1,sum1=1+1=2*/
printf("sum1=%d\n",sum);
sum=a+a; /*a在这个表达式里都变为2,sum2=2+2=4*/
printf("sum2=%d\n",sum);
getch();
}
结果:sum1=2 sum2=4
新王登基,血流成河!
#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",s1,s2);
}
按本人的推论:
MIN宏展开后:s1=(a=b)>(b-a)?(a=b):(b-a)
即: (a=3)>(3-1)>(a=3):(3-1)
所以:s1=a=3
T宏展开后:s2=a++*a+b+c*a*++b/4
即: 3*4+4+5*4*3/4
得: 31
不知错在
#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",s1,s2);
}
呵呵不好意思,刚才看错你的意思了,我觉得应该是这样,s2里的a始终不变,因为a是用完了再加1,所以a在这个表达式里都不变(都等于3),b是没用之前加1后再用,所以s2=3*3+4+5*3*4/4=28
我同意你的说法,在带参宏定义里括号的关系不大,程序就是按顺序计算的
还有就是顺序问题, 是x*r*y 不是x*y*r
一元运算符++.--比*. /优先级高.要先算得.........我觉得应该是楼上3*3+4+5*3*4/4的28
但不知为什么我VC 算出来是3.27
求解........