一道C++题目,求详解

2025-01-05 16:01:29
推荐回答(4个)
回答1:

直接代入即可,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 2 5*2 5,计算得:21!

回答3:

程序中调用宏时,是把变量全部替换,然后再进行计算,如下:
N(2,2+5)= M(2) + M(2+5) = 2*2 + 2+5*2+5 = 21

回答4:

A 21,直接代换