一、什麼是條件編譯
在很多情況下,我們希望程式的其中一部分**只有在滿足一定條件時才進行編譯,否則不參與編譯(只有參與編譯的**最終才能被執行),這就出現了條件編譯。
二、基本用法
#if 條件1
...code1...
#elif 條件2
...code2...
#else
...code3...
#endif
1> 如果條件1成立,那麼編譯器就會把#if 與 #elif之間的code1**編譯進去(注意:是編譯進去,不是執行,很平時用的if-else是不一樣的)
2> 如果條件1不成立、條件2成立,那麼編譯器就會把#elif 與 #else之間的code2**編譯進去
3> 如果條件1、2都不成立,那麼編譯器就會把#else 與 #endif之間的code3編譯進去
4> 注意,條件編譯結束後,要在最後麵加乙個#endif,不然後果很嚴重(自己思考一下後果)
5> #if 和 #elif後面的條件一般是判斷巨集定義而不是判斷變數,因為條件編譯是在編譯之前做的判斷,巨集定義也是編譯之前定義的,而變數是在執行時才產生的、才有使用的意義
三、例子
#include #define max 11
int main ()
編譯預處理後的真實**是這樣的:
/*stdio.h檔案中的內容將會代替#include 的位置*/
int main ()
輸出結果:
max大於0
四、其他用法
1.#if defined()
和#if !defined()的用法
#if 和 #elif後面的條件不僅僅可以用來判斷巨集的值,還可以判斷是否定義過某個巨集。比如:
如果前面已經定義過max這個巨集,就將code編譯進去。它不會管max的值是多少,只要定義過max,條件就成立。#if defined(max)
...code...
#endif
條件也可以取反:
#if !defined(max)
...code...
#endif
如果前面沒有定義過max這個巨集,就將code編譯進去。
2.#ifdef
和#ifndef的使用
1> #ifdef的使用和#if defined()的用法基本一致
#ifdef max
...code...
#endif
如果前面已經定義過max這個巨集,就將code編譯進去。
2> #ifndef又和#if !defined()的用法基本一致
#ifndef max
...code...
#endif
如果前面沒有定義過max這個巨集,就將code編譯進去。
C語言學習之預處理
編譯乙個c程式需要經過預處理 編譯 彙編和鏈結幾個步驟,預處理是在編譯之前所做的工作,預處理其實就是對原始檔做一些編輯工作,為編譯做好準備。1.條件編譯 if constant expression endif 或者 if constant expression elif constant expr...
c語言學習筆記 預處理
編譯的幾個階段 我們平時使用的編譯器,其實準確來講應該叫編譯工具鏈,因為其中包括了不止一種編譯器,他們之間相互銜接,完成將程式轉化為二進位制 的功能 主要分為4個階段,預處理 c 彙編.s 編譯.o 鏈結 axf hex bin 四個過程 常用預處理指令 include if,end,define ...
IOS基礎 C語言學習之陣列
一 陣列的基本概念 1.什麼是陣列 陣列,從字面上看,就是一組資料的意思,沒錯,陣列就是用來儲存一組資料的 2.陣列的特點 1 只能存放一種型別的資料,比如int型別的陣列 float型別的陣列 2 裡面存放的資料稱為 元素 二 陣列的定義 1.定義 想要定義乙個陣列,需要宣告兩點 宣告陣列的型別 ...