4 回答
TA贡献1828条经验 获得超4个赞
#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;
就是说,宏替换只是简单地用定义的宏体去替换宏名而不进行任何计算。因此,宏定义中若出现表达式时,园括号的有无,效果明显不同。为了保证定义在置换后仍保持正确的运算顺序,经常在定义中使用必要的圆括号将字符串括起来。
TA贡献1859条经验 获得超6个赞
在C语言中宏是用来加载代码的,是一个单独的程序处理的。
比如,#define f(n) n==0? 1:f(n-1)+f(n-2)
当n=5时,就会被展开为
f(n-1)+f(n-2);
之后f(n)就找不到了,所以无法实现递归。
TA贡献1842条经验 获得超21个赞
就是宏里边可以嵌套宏例如:
#ifdef AA
……
#ifdef BB
……
#endif
……
#endif
递归?谁会拿宏来递归呢
也许不是这个意思也许是说这个吧:
#define a aa;
#define aa 1;
可嵌套是指这个意思吧;
不可递归就是不能定义回去吧,比如说:
#define a aa;
#define aa aaa;
#define aaa a;
- 4 回答
- 0 关注
- 553 浏览
添加回答
举报