对宏的使用的理解

来源:互联网 发布:c语言杨辉三角形算法 编辑:程序博客网 时间:2024/05/22 06:23

#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定义的符号,如此循环作替换过程。

原创粉丝点击