C語言基礎-08-預處理指令2-條件編譯

條件編譯的概念

在不少狀況下,咱們但願程序的其中一部分代碼只有在知足必定條件時才進行編譯,不然不參與編譯(只有參與編譯的代碼最終才能被執行),這就是條件編譯函數

1、基本用法

#if 條件1
 ...code1...
#elif 條件2
 ...code2...
#else
 ...code3...
#endif

1> 若是條件1成立,那麼編譯器就會把#if 與 #elif之間的code1代碼編譯進去(注意:是編譯進去,不是執行,很平時用的if-else是不同的)
2> 若是條件1不成立、條件2成立,那麼編譯器就會把#elif 與 #else之間的code2代碼編譯進去
spa

3> 若是條件一、2都不成立,那麼編譯器就會把#else 與 #endif之間的code3編譯進去code

4> 注意,條件編譯結束後,要在最後面加一個#endif,否則後果很嚴重(本身思考一下後果)orm

5> #if  #elif後面的條件通常是判斷宏定義而不是判斷變量,由於條件編譯是在編譯以前作的判斷,宏定義也是編譯以前定義的,而變量是在運行時才產生的、纔有使用的意義開發

2、舉個例子

#include <stdio.h>

#define MAX 11

int main ()
{
#if MAX == 0
    printf("MAX是0");
#elif MAX > 0
    printf("MAX大於0");
#else
    printf("MAX小於0");
#endif
    return 0;
}

在第3行定義了一個宏MAX,固然在開發中這個MAX可能被定義在其餘頭文件中,如今只是爲了方便演示,就寫到main函數上面了。注意第7到第13行的條件編譯語句。
因爲MAX爲11,因此#elif的條件成立,第10行代碼將會被編譯進去,其實編譯預處理後的代碼是這樣的:編譯器


3、其餘用法

1.#if defined()#if !defined()的用法

#if  #elif後面的條件不單單能夠用來判斷宏的值,還能夠判斷是否認義過某個宏。好比:it

1 #if defined(MAX)
2 ...code...
3 #endif

若是前面已經定義過MAX這個宏,就將code編譯進去。它不會管MAX的值是多少,只要定義過MAX,條件就成立。io

條件也能夠取反:編譯

1 #if !defined(MAX)
2 ...code...
3 #endif

若是前面沒有定義過MAX這個宏,就將code編譯進去。class

2.#ifdef#ifndef的使用

* #ifdef的使用和#if defined()的用法基本一致

1 #ifdef MAX
2 ...code...
3 #endif

若是前面已經定義過MAX這個宏,就將code編譯進去。

相關文章
相關標籤/搜索