对宏的使用的理解

#define name(parameter-list)   stuff

注意:参数列表的左括号必须与name相邻。如果两者之间有任何空白存在,参数列表就会被解释为stuff的一部分。

对于#define 替换也有很多诡异的地方,有的时候会让人很费解。

 

解析步骤:

1.

2.

3.

 

宏参数和#define 定义可以包含其他#define 定义的符号。但是,宏不可以出现递归。

 

可以举一个例子便可明白:

 

  1. #define f(a,b) a##b
  2. #define g(a)   #a
  3. #define h(a) g(a)
  4. h (f ( 1, 2 ) )
  5. g (f ( 1, 2 ) )

写出4,5的替换过程:

 

5: g(f(1,2)) ---> #f(1,2)这样写是不合法的,其实是直接成了字符串常量了 f(1,2),结束

 

4 :h(f(1,2)) ----> g(f(1,2))------>替换f(1,2)得g(12)------>#12==12

特别要注意4,这种替换的顺序。顺序扫描之后,再返回来顺序扫描找#define定义的符号,如此循环作替换过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值