大話c語言(下)之 預處理命令篇
預處理就是在編譯之前,通過一些預處理命令對原始碼進行管理和控制的過程。
由原始碼得到可執行的程式,會經過預處理、編譯、彙編和連結幾個過程
預處理命令大致可以分為檔案包含、巨集和條件編譯幾個部分,所有的預處理命令都是以“#”開頭的。
這裡只分享幾個常見的預處理命令,至於一些不常見的,還是那句話,我們可以在需要用到它的時候再去學,到實踐中去學。
一,檔案包含
1,標頭檔案
標頭檔案也是一個文字檔案,在C語言中,原始檔通常都是以.c作為檔名的字尾,而標頭檔案則是以.h作為檔名的字尾。在進行程式的編譯時,需要對原始檔進行編譯,而標頭檔案是不參與編譯過程的。
2,#include命令
include命令用於包含標頭檔案,即將一個指定的標頭檔案的內容包含至當前檔案中。
二,巨集
最初設計巨集的目的就是為了便於程式碼的維護,而隨著技術的不斷髮展,目前可以通過巨集實現程式碼管理、流程控制、錯誤和異常檢測等功能。
對原始檔進行編譯前,前處理器會對原始碼中的巨集進行文字替換處理,即將巨集名部分替換為所對應的巨集值部分。因此,也常將這種巨集處理的行為稱為巨集替換或巨集展開。
1,巨集的定義
可以通過#define 命令來定義一個巨集。如下:
#define 巨集名 巨集值
巨集名是一個識別符號,為所定義巨集的名字,可使用在原始碼中。巨集值為巨集名所對應的值,它可以是一個常數、表示式、字元、字串等。需要注意的是,巨集定義並非C語言的語句,因此最後不需要加上分號。
簡單體會一下巨集:
#include<stdio.h>
#define LEN 10 //巨集定義
int main(){
for(int i=1;i<=LEN;i++) //使用巨集
printf("%d ",i*10);
return 0;
}
在使用巨集的時候,要特別需要注意的是:前處理器對巨集的處理只是簡單的替換行為:
#include<stdio.h>
#define NUM 2+3
int main(){
int n=NUM*NUM;
printf("n=%d\n",n);
return 0;
}
上面這段程式碼的輸出值是多少呢?是25嗎?結果並不是25!該程式編譯執行後,結果為n=11。因為經過巨集替換後,原始碼中的語句"int n=NUM*NUM;"會被替換為"int n=2+3 * 2+3;" 因此結果便為"2+6+3",結果為11。
那怎麼改一下子,結果才為25呢?只需要將巨集按如下定義即可:
#define NUM(2+3)
說了這麼多,簡單的說,巨集就是讓我們知道去簡單替換!