>注意:编译器不扩展字符串常量中的宏名。例:#define PI 3. 1415printf("PI = %f\n",PI);展开后:printf("PI = %f\n", 3.1415);宏定义可嵌套,但是不能递归。例:版权所有@陈暂保留所有权利#define A l#define B A+l // OK#define N N+2 // Wrong6
版 权 所 有 © 陈 哲 保 留 所 有 权 利 ➢注意: ◦编译器不扩展字符串常量中的宏名。例: #define PI 3.1415 printf("PI = %f\n", PI); 展开后: printf("PI = %f\n", 3.1415); ◦宏定义可嵌套,但是不能递归。例: #define A 1 #define B A+1 // OK #define N N+2 // Wrong 6
>例:宏体中要使用必要的括号#include <stdio.h>int mainOJ80#define WIDTH#define LENGTH(WIDTH+40)int x = LENGTH * 2;版权所有@陈暂保留所有权利printf("%d", x);return O;afterexpansionmacro(80+40)* 2;intX=
版权所有© 陈哲保留所有权利 ➢例:宏体中要使用必要的括号。 #include <stdio.h > int main() { #define WIDTH 80 #define LENGTH WIDTH+40 int x = LENGTH * 2; printf ("%d", x); return 0; } 7 #define LENGTH (WIDTH+40) // after macro expansion int x = 80+40 * 2; x = (80+40) * 2;
>带参数的宏定义?语法:#define 宏名(形参列表)宏体·形参列表中的参数名用逗号隔开语义:在编译预处理阶段将代码中出现的宏名和实参替换为宏体中的文本,并且宏体中的形参被替换为实参例:宏名和参数列表中间不能有空格a*b#defineAREA(a, b)版权所有@陈暂保留所有权利1tint area = AREA(3, 2);宏展开后: int area = 3*2;8
版 权 所 有 © 陈 哲 保 留 所 有 权 利 ➢带参数的宏定义 ◦语法:#define 宏名(形参列表) 宏体 ◦形参列表中的参数名用逗号隔开 ◦语义:在编译预处理阶段将代码中出现 的宏名和实参替换为宏体中的文本,并 且宏体中的形参被替换为实参。 例: #define AREA(a, b) a*b int area = AREA(3, 2); 宏展开后: int area = 3*2; 8 宏名和参数列表 中间不能有空格