宏定义以及自增自减运算符
设有下面宏定义:#define MIN(xy) (x)>(y)?(x):(y)
#define T(x,y,r) x*r*y/4
则执行以下语句后,s1的值为3。s2 的值是28,为什么?
int a=1, b=3, c=5, s1, s2;
s1=MIN (a=b, b-a) ;
s2=T (a++, a*++b, a+b+c);
关于s2中的a++*a+b+c*a*++b/4
按理说应该是3*4+3+5*4*4/4=35,为什么答案是28? {:10_266:} 程序运行不就是3和35吗 相信自己,答案是错的。 因为先算了s1,所以现在的值分别是:a=3、b=3、c=5
s2里面的运算符中自增优先级最高
a++*a+b+c*a*++b/4
等同于
(a++)* a+b+c * a*(++b)/4
= 3 * 3+4+5 * 3 * 4 / 4
=9+4+5*3
=28 另外#define MIN(xy),xy中间少了逗号吧
(x)>(y)?(x):(y)求得也是最大值,不应该是MIN而是MAX吧 s2=T (a++, a*++b, a+b+c);
int a=1, b=3, c=5, s1, s2;
你的宏定义要这样写
#define T(x,y,r)(x)*(r)*(y)/4
页:
[1]