如何系統學習C 語言(下)之 預處理命令篇

Charmchin發表於2021-11-14

大話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)

說了這麼多,簡單的說,巨集就是讓我們知道去簡單替換!

相關文章