为了账号安全,请及时绑定邮箱和手机立即绑定

请教关于宏定义嵌套问题

请教关于宏定义嵌套问题

梵蒂冈之花 2019-04-14 08:08:35
请教关于宏定义嵌套问题
查看完整描述

4 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

#define WIDTH 80
#define LENGTH (WIDTH+40)
在第二个宏定义中,使用了前面定义过的宏名WIDTH。在编译预处理时,程序中所有的WIDTH都被80所替换,所有的LENGTH又被(80+40)替换。如果程序中出现了如下语句:
var=LENGTH*20;
经过替换以后变为:
var=(80+40)*20;
但是如按以下方式定义:
#define WIDTH 80
#define LENGTH WIDTH+40
var=LENGTH*20;
则经过编译预处理后变成
var=80+40*20;
就是说,宏替换只是简单地用定义的宏体去替换宏名而不进行任何计算。因此,宏定义中若出现表达式时,园括号的有无,效果明显不同。为了保证定义在置换后仍保持正确的运算顺序,经常在定义中使用必要的圆括号将字符串括起来。

查看完整回答
反对 回复 2019-04-15
?
杨魅力

TA贡献1811条经验 获得超5个赞

在C语言中宏是用来加载代码的,是一个单独的程序处理的。
比如,#define f(n) n==0? 1:f(n-1)+f(n-2)
当n=5时,就会被展开为
f(n-1)+f(n-2);
之后f(n)就找不到了,所以无法实现递归。

查看完整回答
反对 回复 2019-04-15
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

就是宏里边可以嵌套宏例如:
#ifdef AA
……
#ifdef BB
……
#endif
……
#endif
递归?谁会拿宏来递归呢

也许不是这个意思也许是说这个吧:
#define a aa;
#define aa 1;
可嵌套是指这个意思吧;
不可递归就是不能定义回去吧,比如说:
#define a aa;
#define aa aaa;
#define aaa a;





查看完整回答
反对 回复 2019-04-15
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

可以嵌套:#define a bb(不能是aa)
#define bb 123
预编译时a会变为123
不可递归:#define c 1+c
或#define c 1+b
#define b 1+c
预编译时c会变成1+1+1+1+1+......无限循环

查看完整回答
反对 回复 2019-04-15
  • 4 回答
  • 0 关注
  • 1203 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信