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);
}