預處理是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 巨集名 字串 作用 在編譯預處理的時候,將巨集名替換成右邊的字串 注意 巨集名一般大寫字母 巨集名在編譯預處理的時候不做編譯檢查,只做巨集名字...