預處理指令

2021-10-01 19:21:34 字數 2495 閱讀 3264

#define 巨集名 字串

#define 巨集名 (引數1,引數2,....,引數n) 字串

#undef 巨集名

#include "檔名" (或《檔名》) 

# if 常量表示式

# ifdef 巨集名

# ifndef 巨集名 

# else

# endif

# pragma

程式語言的預處理的概念:在編譯之前進行的處理。 c語言的預處理主要有三個方面的內容: 1.巨集定義; 2.檔案包含; 3.條件編譯。 預處理命令以符號「#」開頭。

中文名預處理命令

概    念

程式語言的預處理

符    號

「#」開頭

格    式

#define

識別符號 字串(巨集定義)

1 巨集定義

2 檔案包含

3 條件編譯

編輯1.不帶引數的巨集定義:

巨集定義又稱為巨集代換、巨集替換,簡稱「巨集」。

格式:#define

識別符號文字

其中的識別符號就是所謂的符號常量,也稱為「巨集名」。

預處理(預編譯)工作也叫做巨集展開:將巨集名替換為文字(這個文字可以是字串、可以是**等)。

掌握"巨集"概念的關鍵是「換」。一切以換為前提、做任何事情之前先要換,準確理解之前就要「換」。

例:#define pi 3.1415926

把程式中全部的識別符號pi換成3.1415926

說明:(1)巨集名一般用大寫

(2)使用巨集可提高程式的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:陣列大小常用巨集定義

(3)可以用#undef命令終止巨集定義的作用域

(4)巨集定義可以巢狀

2.帶引數的巨集:

除了一般的字串替換,還要做引數代換

格式:#define 巨集名(參數列) 文字

例如:#define s(a,b) a*b

area=s(3,2);第一步被換為area=a*b; ,第二步被換為area=3*2;

類似於函式呼叫,有乙個啞實結合的過程:

(1)實參如果是表示式容易出問題

#define s(r) r*r

area=s(a+b);第一步換為area=r*r;,第二步被換為area=a+b*a+b;

正確的巨集定義是#define s(r) ((r)*(r))

(2)巨集名和引數的括號間不能有空格

(3)巨集替換只作替換,不做計算,不做表示式求解

(4)函式呼叫在編譯後程式執行時進行,並且分配記憶體。巨集替換在編譯前進行,不分配記憶體

(5)巨集的啞實結合不存在型別,也沒有型別轉換。

(6)巨集展開使源程式變長,函式呼叫不會

(7)巨集展開不佔執行時間,只佔編譯時間,函式呼叫佔執行時間(分配記憶體、保留現場、值傳遞、返回值)

編輯乙個檔案包含另乙個檔案的內容

格式:#include "檔名"

或#include 《檔名》

編譯時以包含處理以後的檔案為編譯單位,被包含的檔案是原始檔的一部分。

編譯以後只得到乙個目標檔案.obj

被包含的檔案又被稱為「標題檔案」或「頭部檔案」、「標頭檔案」,並且常用.h作副檔名。

修改標頭檔案後所有包含該檔案的檔案都要重新編譯

標頭檔案的內容除了函式原型和巨集定義外,還可以有結構體定義,全域性變數定義:

(1)乙個#include命令指定乙個標頭檔案;

(2)檔案1包含檔案2,檔案2用到檔案3,則檔案3的包含命令#include應放在檔案1的頭部第一行;

(3)包含可以巢狀;

(4)《檔名》稱為標準方式,系統到頭檔案目錄查詢檔案,

"檔名"則先在當前目錄查詢,而後到頭檔案目錄查詢;

(5)被包含檔案中的靜態全域性變數不用在包含檔案中宣告。

編輯有些語句希望在條件滿足時才編譯。

格式:(1)

#ifdef 識別符號

程式段1

#else

程式段2

#endif

或#ifdef

程式段1

#endif

當識別符號已經定義時,程式段1才參加編譯。

格式:(2)

#ifndef 識別符號

#define 標識1

程式段1

#endif

如果識別符號沒有被定義,則重定義標識1,且執行程式段1。

格式:(3)

#if 表示式1

程式段1

#elif 表示式2

程式段2

#elif 表示式n

程式段n

#else

程式段n+1

#endif

當表示式1成立時,編譯程式段1,當不成立時,編譯程式段2。

使用條件編譯可以使目標程式變小,執行時間變短。

預編譯使問題或演算法的解決方案增多,有助於我們選擇合適的解決方案。

此外,還有布局控制:#pragma,這也是我們應用預處理的乙個重要方面,主要功能是為編譯程式提供非常規的控制流資訊。

預處理指令

預處理指令是我們寫在程式 中的給預處理器 preprocessor 的 命令,而不是程式本身的語句。預處理器在我們編譯乙個c 程式時由編譯器自動執行,它負責控制對程式 的第一次驗證和消化。所有這些指令必須寫在單獨的一行中,它們不需要加結尾的分號 在這個教程的開頭我們已經提到了一種預處理指令 defi...

預處理指令

1.人們常常稱機器語言為目標 object code 2.預處理命令 preprocessor directives 三種預處理包括 巨集定義 檔案包含 條件編譯。在對源程式編譯之前,會對程式中的所有預處理指令進行處理。預處理就是在進行編譯的第一遍詞法掃瞄和語法分析之前所作的工作。說白了,就是對原始...

預處理指令

普通 define 巨集名 字串 define my int int define max 10000 帶引數 define 巨集名 形參 字串 define add x,y x y 在大規模的開發過程中,特別是跨平台和系統的軟體裡,條件編譯很重要。include using namespace s...