大話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)
說了這么多,簡單的說,宏就是讓我們知道去簡單替換!