前阵子遇到一个有关宏的问题
代码如下:
#define Enable (1)
#define Disable (0)
int Test = Disable;
#define Enable_Test() ( Test = Enable )
#undef Enable
#undef Disable
int main( void )
{
Enable_Test();
while(1)
{
}
}
编译器报错,说Enable没有定义。
这个问题现在看起来很简单,但是在当时却十分纠结。
一开始我以为Test = Enable
在Enable宏撤销之前会被替换为Test = 1
,其实当编译器报错的时候我就应该明白事实并非如此。
后来查了下资料:
处理命令和宏定义名时,不对#define命令的任何部分进行宏替换,也不对宏体中的宏名进行替换,只有对特定宏调用拓展宏体之后,才识别宏体中的宏名。