#include <stdio.h>
#define N 100
void f(void);
int main(void)
{
f();
#ifdef N
#undef N
#endif
return 0;
}
void f(void){
#if defined(N)
printf("N is %d\n",N);
#else
printf("N is undefined\n");
#endif // defined
}
为什么这个输出打印N
是不确定不应该将其打印N
是100,因为在f
函数调用它达到去除值100民主基金之前?宏打印输出
预处理器不会作为程序的流程运行。 如果您想使此布尔变量不是宏 – Alon
否;预处理器按照文件中的文本顺序进行文本处理,并在编译器正确看到代码之前执行。当编译器看到函数'f'的主体时,宏'N'是未定义的。你可以简单地使用'#undef N';它不会对未定义的宏取消定义,所以'#ifdef N'和匹配的'#endif'是不需要的。 –
宏在运行时在编译/编译时解析。它们是_pre_-processed。当你的程序执行时,N不再被定义。 – ryyker