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

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

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