預處理 01 無參巨集定義

2022-03-22 06:17:55 字數 1703 閱讀 2953

在之前,已多次使用過以「#」號開頭的預處理命令。

如包含命令#include ,巨集定義命令#define pi 3.1415926等。

在源程式中這些命令都放在函式之外,而且一般都放在原始檔的前面,它們稱為預處理部分。

1.無參巨集定義

無參巨集的巨集名後不帶引數。其定義的一般形式為: #define  識別符號  字串

其中的「#」表示這是一條預處理命令。凡是以「#」開頭的均為預處理命令。define 為巨集定義命令。「識別符號」為所定義的巨集名。「字串」可以是常數、表示式、格式串等。

例如: #define pi 3.1415926,它的作用是指定識別符號pi來代替數3.1415926。

在編寫源程式時,所有的3.1415926都可由pi代替,而對源程式作編譯時,將先由預處理程式進行巨集代換,即用3.1415926表示式去置換所有的巨集名pi,然後再進行編譯。

2.對於巨集定義還要說明以下幾點:

(一)巨集定義是用巨集名來表示乙個字串,在巨集展開時又以該字串取代巨集名,這只是一種簡單的代換,字串中可以含任何字元,可以是常數,也可以是表示式,預處理程式對它不作任何檢查。如有錯誤,只能在編譯已被巨集展開後的源程式時發現。

(二)巨集定義不是說明或語句,在行末不必加分號,如加上分號則連分號也一起置換。

(三)巨集定義必須寫在函式之外,其作用域為巨集定義命令起到源程式結束。如要終止其作用域可使用# undef命令。

(四)巨集名在源程式中若用引號括起來,則預處理程式不對其作巨集代換。

例項如下:

#include #define pi 3.1415926

void fun(void

);void

main()

void fun(void

)

view code

(五)巨集定義允許巢狀,在巨集定義的字串中可以使用已經定義的巨集名。在巨集展開時由預處理程式層層代換。

例項如下:

#include #define pi 3.1415926

#define s pi*r*r

void fun(void

);void

main()

view code

(六)習慣上巨集名用大寫字母表示,以便於與變數區別。但也允許用小寫字母。

(七)可用巨集定義表示資料型別,使書寫方便。

例如:#define integer int

注意:巨集定義表示資料型別和用typedef定義資料說明符的區別

區別:巨集定義只是簡單的字串代換,是在預處理完成的,而typedef是在編譯時處理的,它不是作簡單的代換,而是對型別說明符重新命名。被命名的識別符號具有型別定義說明的功能。

請看示例:

#include #define pin1 char*//

#define末尾不加分號

typedef

char* pin2;//

typedef末尾加分號

void

main()

view code

(八)對「輸出格式」作巨集定義,可以減少書寫麻煩。請看示例:

#include #define p printf

#define d "%d\n"

#define f "%f\n"

void

main()

view code

預處理 巨集定義

1,預處理 預處理是指在進行編譯的第一遍掃瞄 詞法掃瞄和語法分析 之前所作的工作。預處理是 語言的乙個重要功能,它由預處理程式負責完成。當對乙個原始檔進行編譯時,系統將自動引用預處理程式對源程式中的預處理部分作處理,處理完畢自動進入對源程式的編譯。語言提供了多種預處理功能,如巨集定義 檔案包含 條件...

C 預處理 巨集定義

開發乙個 c語言程式,讓它暫停 5 秒以後再輸出內容 helllo 並且要求跨平台,在 windows 和 linux 下 include 說明 在windows 作業系統和 linux作業系統下,生成原始碼不一樣 if win32 如果是windows平台,就執行 include elif lin...

巨集定義(無參,有參,巨集函式)(詳細介紹)

以符號 開頭的命令,如 define n 10 define 這些命令不是c語言本身的組成部分,而是由c編譯系統提供的。在通常的編譯 詞法和語法分析 生成 優化等 之前,編譯系統要預先對這些命令進行處理,因此稱為 編譯預處理 命令。編譯預處理可以改善程式設計環境,提高程式設計效率,有助於編寫易移植 ...