一、预处理指令在编译阶段就处理了,所以编译成才后运行的这个阶段已经是预处理后的结果,例如指令
#define BUFFSIZE 4096
的预处理方式是把代码出现有BUFFSIZE的地方都替换为4096;
下面的例子,test会正确打印BUFFSIZE,跟作用域无关:
#include <stdio.h> void test(void); int main(void) { test(); #define BUFFSIZE 4096 } void test(void){ printf("%d\n", BUFFSIZE);//输出4096 }
反而跟编译顺序有关,把BUFFSIZE定义放在定义test的行数之下,编译器就会报错:
#include <stdio.h> void test(void); void test(void){ printf("%d\n", BUFFSIZE); } int main(void) { test(); #define BUFFSIZE 4096 }
报错:
c72.c: In function ¡®test¡¯: c72.c:7:17: error: ¡®BUFFSIZE¡¯ undeclared (first use in this function) printf("%d\n", BUFFSIZE); ^ c72.c:7:17: note: each undeclared identifier is reported only once for each function it appears in