前阵子仔细重新研究了一下C的宏展开.总结起来,有以下几个主要规则: 每次宏展开的结果会被重复扫描,直到没有任何可展开的宏为止. 每展开一个宏,都会记住这次展开,在这个宏展开的结果及其后续展开中,不再对相同的宏做展开. 带参数的宏,先对参数做展开,除非宏定义体中包含#或## a) #表示将后续标识符转换为字符串 b) ##表示将两个标识符连接成一个标识符 c) 注意参数展开的结果中即使有逗号(,),也不视为参数的分隔符 如果宏定义中带有参数,而代码中出现同样标识符时没有参数,不视为宏. 下面的三段…