<分析>:
預編譯又稱為預處理 ,是做些代碼文本的替換工作。處理 # 開頭的指令 , 比如拷貝 #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
####################################