第六题,宏代换,详细解释一下
发布网友
发布时间:2023-09-25 21:30
我来回答
共1个回答
热心网友
时间:2024-11-24 16:59
定义宏的格式:
#define 宏 记号列表
你写完代码之后,编译器并不是直接开始编译,预处理器首先对源码文件进行一些预处理操作,其中的一项任务就是把你定义的所有宏替换成对应的记号列表。
这一步就是简单的文本替换,完全傻瓜式的复制粘贴,不会添加多余的符号。
把所有的f(a)替换成a*a,把f(b)替换成b*b。
f(a)/f(b)会被替换成:
a*a/b*b
而不是:
(a*a)/(b*b)
所以说结果是:
6*6/2*2 = 36
不是:
(6*6)/(2*2) = 9
如果你要达到上面的效果,则应该在宏定义里面加几个括号。
#define f(x) (x*x)
不过如果你给f传入(a+b)这种表达式:
f(a+b)
那么宏替换之后:
(a+b*a+b)
先计算:b*a。
如果要处理这种表达式形式的参数,则定义宏的时候变量也要加括号:
#define f(x) ((x)*(x))