-
蓝山帝景
#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+40var=LENGTH*20;则经过编译预处理后变成var=80+40*20;就是说,宏替换只是简单地用定义的宏体去替换宏名而不进行任何计算。因此,宏定义中若出现表达式时,园括号的有无,效果明显不同。为了保证定义在置换后仍保持正确的运算顺序,经常在定义中使用必要的圆括号将字符串括起来。
-
杨魅力
在C语言中宏是用来加载代码的,是一个单独的程序处理的。比如,#define f(n) n==0? 1:f(n-1)+f(n-2)当n=5时,就会被展开为f(n-1)+f(n-2);之后f(n)就找不到了,所以无法实现递归。
-
qq_笑_17
就是宏里边可以嵌套宏例如:#ifdef AA……#ifdef BB……#endif……#endif递归?谁会拿宏来递归呢也许不是这个意思也许是说这个吧:#define a aa;#define aa 1;可嵌套是指这个意思吧;不可递归就是不能定义回去吧,比如说:#define a aa;#define aa aaa;#define aaa a;
-
慕侠2389804
可以嵌套:#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+......无限循环