第六题,宏代换,详细解释一下

如题所述

定义宏的格式:
#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))追问

大神,帮忙解决一下

大神,帮忙看一看

追答

数据结构和算法还没学,抱歉

温馨提示:答案为网友推荐,仅供参考
相似回答