宏定义带运算式
被学习通里的作业坑了

#define  ADD(x)  x+x
int m=1,n=2,k=3;
int sum=ADD(m+n)*k;

A.sum=9     B.sum=10     C.sum=12     D.sum=18
一开始这样想,ADD(3)不就是3+3=6么,再63=18,诶,刚好选D。结果啪的一下,答案错误。
首先x+x没加括号是一个坑,计算机只是简单地把数字塞进去了,第二运算法优先级又一个坑,这题应该是这样:
ADD(1+2)=(1+2+1+2)*
3=(1+2+1+2*3)=4+6=10(这个鬼东西不能多打,用×代替)

再来瞅一题

#define  MAX(x,y)  (x)>(y)?(x):(y)
 int a=5,b=2,c=3,d=3,t;
 t=MAX(a+b,c+d)*10;

这次加了括号了,所以是MAX(7,6),所以t=7,那么如果我把宏定义里面的>改为<呢?那么t=MAX(7,6)×10=6×10=60(是的,*与6结合了)

第一题是x+x,现在来变成x*x

#define  FAQ(x)  x*x
则 FAQ( 1+1)=?

答案是(1+1×1+1)=3,不是4啊~
那么这个呢?

#define  FAQ(x)  (x)*(x)
则 FAQ( 1+1)=?

答案是2×2=4,这个就4了~

那么最后来着整个题呗

#define  VAN(x)  x*x
则 VAN( VAN(1+1))*2?

A.6     B.10     C.18    D.32
VAN(1+1)=1+1×1+1
VAN(VAN(1+1))=1+1×1+1(×)1+1×1+1    【中间这个(×)是为了方便理解,这个是两个连接在一起的】
VAN(VAN(1+1))*2=1+1×1+1(×)1+1×1+1×2=1+1+1+1+2=6
搞懂了么>0<