1.條件編譯的概念
在很多情況下,我們希望程序的其中一部分代碼只有在滿足一定條件時才進(jìn)行編譯,否則不參與編譯(只有參與編譯的代碼最終才能被執(zhí)行),這就是條件編譯。
2.基本用法
#if 條件1
...code1...
#elif 條件2
...code2...
#else
...code3...
#endif
1>如果條件1成立,那么編譯器就會把#if 與 #elif之間的code1代碼編譯進(jìn)去(注意:是編譯進(jìn)去,不是執(zhí)行,很平時用的if-else是不一樣的)?2> 如果條件1不成立、條件2成立,那么編譯器就會把#elif 與 #else之間的code2代碼編譯進(jìn)去
3> 如果條件1、2都不成立,那么編譯器就會把#else 與 #endif之間的code3編譯進(jìn)去
4> 注意,條件編譯結(jié)束后,要在最后面加一個#endif,不然后果很嚴(yán)重(自己思考一下后果)
5> #if 和 #elif后面的條件一般是判斷宏定義而不是判斷變量,因為條件編譯是在編譯之前做的判斷,宏定義也是編譯之前定義的,而變量是在運(yùn)行時才產(chǎn)生的、才有使用的意義
3.其他用法
1>#if defined()和#if !defined()的用法
#if 和 #elif后面的條件不僅僅可以用來判斷宏的值,還可以判斷是否定義過某個宏。
比如:
#if defined(MAX)
...code...
#endif
如果前面已經(jīng)定義過MAX這個宏,就將code編譯進(jìn)去。它不會管MAX的值是多少,只要定義過MAX,條件就成立。
條件也可以取反:
#if !defined(MAX)
...code...
#endif
如果前面沒有定義過MAX這個宏,就將code編譯進(jìn)去。
2>#ifdef和#ifndef的使用
#ifdef的使用和#if defined()的用法基本一致
#ifdef MAX
...code...
#endif
如果前面已經(jīng)定義過MAX這個宏,就將code編譯進(jìn)去。
* #ifndef又和#if !defined()的用法基本一致
#ifndef MAX
...code...
#endif
如果前面沒有定義過MAX這個宏,就將code編譯進(jìn)去。
4.代碼
1 #include <stdio.h> 2 3 // 只要寫了#if,在最后面必須加上#endif 4 5 //#define A 5 6 7 int main() 8 { 9 #ifndef A10 //#ifdef A11 //#if !defined(A)12 PRintf("哈哈/n");13 #endif14 15 //int a = 10;16 /*17 if (a == 10)18 {19 printf("a是10/n");20 }21 else if (a == 5)22 {23 printf("a是5/n");24 }25 else26 {27 printf("a其他值/n");28 }*/29 /*30 31 #if (A == 10)32 printf("a是10/n");33 #elif (A == 5)34 printf("a是5/n");35 #else36 printf("a其他值/n");37 #endif38 39 */40 41 return 0;42 }
新聞熱點
疑難解答