C語言之預處理

2021-07-09 01:39:17 字數 2064 閱讀 2509

預處理是c語言(也包括oc)的一部分,它們是一些特殊的命令.在編譯器對c程式(或者 oc程式)進行編譯之前,編譯器會對這些預處理命令進行處理,然後將這些處理的結構與源程式一起進行編譯.

預處理命令有如下特徵.

1)預處理命令必須以#號開頭

2)預處理通常位於程式的開頭部分

下面一起來看一下幾種使用情況:

1: 使用#define,#undef執行巨集定義

#define pi 3.14159

-(void)testone

2: 帶引數的巨集定義

#define

area(r) pi * r * r

#define

areaone(r) (pi * (r) * (r))

-(void)testtwo

3: 使用#ifdef,#ifndef,#else,#endif執行條件編譯

通常來說,源**中所有的**行都會參與編譯,最後生成執行性**,但是有些時候,

程式需要根據機器環境進行選擇性的編譯–對於特定的裝置,只編譯該裝置相關的**,

這可以借助條件編譯來完成.

c語言支援兩組條件編譯指令,第一條是#ifdef,#ifndef,#else,#endif,語法如下:

1):

#ifdef 巨集名稱

//任意語句(可以編寫多個語句)

#endif

這裡表示:如果定義了指定的巨集,則執行#ifdef和#endif之間的語句.

也可以如下:

#ifdef 巨集名稱

//任意語句

#else

//任意語句

#endif

這裡表示:如果定義了指定的巨集定義,則執行#ifdef和#else之間的語句.否則執行#else和 #endif之間的語句.

2):

對於 #ifdef指令還有一種否定寫法:

#ifndef 巨集名稱

//任意語句

#endif

這裡表示:如果沒有定義指定的巨集,則執行#ifndef和#endif之間的語句.

同樣也有:

#ifndef 巨集名稱

//任意語句

#else

//任意語句

#endif

這裡表示:如果沒有定義指定的巨集定義,則執行#ifndef和#else之間的語句.否則執行#else和 #endif之間的語句.

#define iphone

-(void)testthree

#endif

}

4: 使用#if,#elif,#else,#endif執行條件編譯

#if,#elif,#else,#endif提供了更通用的條件編譯,它可以對指定的表示式進行推斷,

根據表示式的值決定是否要編譯指定的語句.語法格式如下:

#if 表示式

//任意語句

#elif 表示式

//任意語句

…可以有0個或者多個#elif語句

#else(注:最後的#else語句可以省略)

//任意語句

#endif

這個條件編譯指令的用法與前面差不多,只是該編譯器指令中使用的條件要麼是常量表示式,要麼是基於已有的巨集的表示式.

#define age 30

-(void)testfour

5: #和##運算子

#define

str(s) # s

#define

concat(a, b)

a##b

// ##運算子在巨集表示式中連線幾個引數

#define version \

3 // 因為有換行符\ 所以上句等價於 #define version 3

-(void)testfive

C語言之預處理

預處理指令 在 編譯 0和1 之前執行的指令叫預處理指令。所有的預處理指令都是以 開頭。預處理的位置是隨便寫的 預處理指令的作用域 從編寫指令的那一行開始一直到檔案結尾 undef 巨集名 從這行 開始,巨集失效 巨集名一般用大寫 或者在巨集名前加 k 代表常量 變數名一般用小寫 一 巨集定義 格式...

c語言之預處理命令

c提供的預處理功能有 巨集定義檔案包含 條件編譯 為了與其她c語句區分,命令經常以符號 開頭。define 識別符號 字串 可以避免反覆輸入字串,後面不加 巨集定義在預設時的有效範圍是全部。也可以用 undef終止巨集定義區域。不含引數 巨集展開帶入程式 含引數 define s a,b a b i...

c語言之預處理指令

c語言的預處理指令 有 巨集定義 檔案包含 條件編譯 巨集定義分為兩類 1 不帶引數的巨集定義 2 帶引數的巨集定義 巨集定義的格式 一般形式 define 巨集名 字串 作用 在編譯預處理的時候,將巨集名替換成右邊的字串 注意 巨集名一般大寫字母 巨集名在編譯預處理的時候不做編譯檢查,只做巨集名字...