<分析>:
预编译又称为预处理 ,是做些代码文本的替换工作。处理 # 开头的指令 , 比如拷贝 #include 包含的文件代码, #define 宏定义的替换 , 条件编译等,就是为编译做的预备工作的阶段,主要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。
c/c++编译系统在对程序进行通常的编译之前,先进行预处理。 c 提供的预处理功能主要有以下三种:1 )宏定义 2 )文件包含 3 )条件编译,以下为使用预处理命令时需要注意的地方:
(1)预处理命令可以放在程序的任何位置;
(2)预处理指令中不容许出现空格;
(3)一行上只能有一条预处理命令,一个预处理命令可以放在多行,行尾用‘\’表示;
(4)宏名最好大写,但是不是硬规定;
(5)宏替换不占用程序运行时间,在编译的时候进行;
(6)文件包含#include<filename>是通过系统环境变量指定系统库目录进行查找的, #include“filename”是通过实在的用户目录下查找的,用户的目录就是通过编译器指 定的,如果查找不到再去库文件里查找。库文件可以用<>也可以用“”,但是用户定义 头文件只能用“”,所以<>比””查找范围小;
(7)预编译器在编译的时候按照程序前后顺序就把值一个一个替换进去了,所以它不会考虑运行时候的逻辑关系,例如:
#define a 10
void foo(); // 函数声明
int main(){
printf("%d..",a);
foo();
printf("%d",a);
}
void foo(){
#undef a
#define a 50
}
以上程序输出是10..10
##################################
#define a 10
void foo(){
#undef a
#define a 50
}
int main(){
printf("%d..",a);
foo();
printf("%d",a);
}
以上程序50..50
####################################