#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的undef之前打印f
为100 ?
答案 0 :(得分:1)
预处理器指令和宏在编译的早期阶段处理,它们在运行时不存在。
仅通过预处理器运行代码(cpp -P
- 警告:首先删除#include
)显示正在编译的实际C代码。
void f(void);
int main(void)
{
f();
return 0;
}
void f(void){
printf("N is undefined\n");
}
至于为什么选择此扩展而不是替代消息,请考虑源中的这些行。
#ifdef N
#undef N
#endif
无论最初是否定义,都不会在(预)处理这些行之后定义它。