响水凹

欢迎来到 Guang-Wen Duan (Dennis Duan) 的个人 Wiki

用户工具

站点工具


computer:c:tips:macro_expansion

宏扩展(Macro expansion)

宏的扩展是一个多次进行的过程:当一个宏扩展之后,会返回到扩展结果的开头,继续再做一次扩展,以便识别出别的宏并扩展它,直到没有宏为止。

扩展在宏调用的时候进行,在#define定义的时候不进行,参见预处理概览

例如宏定义:

#define plus(x, y) add(y, x)
#define add(x, y) ((x) + (y))

调用:

plus(plus(a , b), c)

的实际扩展过程如下:

  1. plus(plus(a, b), c)
  2. add(c, plus(a, b))
  3. ((c) + (plus(a, b)))
  4. ((c) + (add(b, a)))
  5. ((c) + (((b) + (a))))

标准C不对递归形式(直接或间接)的宏进行重复扩展。否则扩展将无限进行下去,直到系统出错,但有些旧的编译器会这样。

递归形式的宏一般用于覆盖旧的定义。如:

#define char unsigned char
computer/c/tips/macro_expansion.txt · 最后更改: 2014/11/01 02:02 由 127.0.0.1