宏定义带运算式
被学习通里的作业坑了
#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<