1. 基本形式
#define name replacement_text
通常情况下,#define
指令占一行,替换文本是 define
指令行尾部的所有剩余部分,但也可以把一个较长的宏定义分成若干行,这时需要在待续的行末尾加上一个反斜杠符 ``。
宏定义也可以带参数,这样可以对不同的宏调用使用不同的替换文本。例:
#define max(A, B) ((A) > (B) ? (A) : (B))
2. 宏展开中的陷阱
仔细考虑一下 max
的展开式,其中的表达式会被计算两次,因此如果表达式中包含自增运算符或输入/输出等行为,则会出现不正确的情况,例如上述的宏 max
:
max(i++