C语言 ——— #define替换规则

目录

1. 在调用宏时,先替换由 #define 定义的符号

2. 在调用宏时,再将参数替换到宏相对应的变量中

3. 最后会再次对文件进行扫描


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 定义的符号,如果是,就重复以上操作

注意:

  1. 宏参数和 #define 定义中可以出现其他 #define 定义的字符,但是对应宏,不能出现递归
  2. 当预处理器搜索 #define 定义的符号的时候,字符串常量的内容并不能被搜索

解释第2点:

代码演示:

#define  A  3

int main()
{
	int a = A; //会被替换为 3
	char ch = 'A'; //不会被替换

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值