直接代入即可,N(2, 2 + 5) = M(2) + M(2 + 5) = 2 * 2 + 2 + 5 * 2 + 5 = 21
这道题主要是考的宏调处时,编译器是怎么处理的。
编译器在这里只做简单的替换,不会给你自动加括号。
所以一般在用宏定义时,最好加上括号,才能得到想要的结果。
这这道题改成如下形式,
#define M(x) (x*x)
#define N(x,y) (M(x)+M(y))
便是写宏定义的规范形式。
宏定义可以把他想像成字符串。很多书也这么说!那么这个宏展开最终是这样的:2*2 2 5*2 5,计算得:21!
程序中调用宏时,是把变量全部替换,然后再进行计算,如下:
N(2,2+5)= M(2) + M(2+5) = 2*2 + 2+5*2+5 = 21
A 21,直接代换