目录
1. 在调用宏时,先替换由 #define 定义的符号
在调用宏时,首先对参数进行检查,看看是否包含任何由 #define 定义的符号,如果是 #define 定义的符号,它们首先被替换
代码演示:
// 加上括号
#define MUL(x,y) ((x) * (y))
#define A 3
int main()
{
int b = 5;
int sum = MUL(A + b, b - A);
return 0;
}
代码解析:
会将 #define 定义的符号先进行替换的意思为 MUL(A + b, b + A) 中的 A 是由 #define 定义的符号,所以在替换的时候会先将 A 替换为 3
原代码就会被替换为:
int sum = MUL(3 + b, b - 3);
2. 在调用宏时,再将参数替换到宏相对应的变量中
在第一步已经完成了由 #define 定义的符号的替换
宏代码代码演示:
#define MUL(x,y) ((x) * (y))
x 变量所对应的参数是 3 + b ,y 变量所对应的参数是 b - 3
源代码就会被替换为:
int sum = ((3 + b) * (b - 3));
3. 最后会再次对文件进行扫描
看看最后被替换的代码是否是其他 #define 定义的符号,如果是,就重复以上操作
注意:
- 宏参数和 #define 定义中可以出现其他 #define 定义的字符,但是对应宏,不能出现递归
- 当预处理器搜索 #define 定义的符号的时候,字符串常量的内容并不能被搜索
解释第2点:
代码演示:
#define A 3
int main()
{
int a = A; //会被替换为 3
char ch = 'A'; //不会被替换
return 0;
}