宏打印输出

时间:2015-08-22 23:35:17

标签: c macros c-preprocessor

#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 ?

1 个答案:

答案 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

无论最初是否定义,都不会在(预)处理这些行之后定义它。