#if

#if

#if和#endif是一組同時(shí)使用的,叫做條件編譯指令。#if與#define、#include等指令一樣是由預(yù)處理器這個(gè)強(qiáng)大的工具處理的,預(yù)處理器可以在編譯前處理c程序。
使用條件編譯指令,如果滿足#if后面的條件,就編譯#if和#endif之間的程序段,否則不編譯。
例如

#define LEN_MAX 3
#define LenMax 6
#if LEN_MAX <LenMax
#undef LEN_MAX
#define LEN_MAX LenMax
#endif

定義了LEN_MAX 和LenMax,如果LEN_MAX <LenMax成立為真,則取消LEN_MAX的定義,重新定義LEN_MAX,也就是說LEN_MAX等于6。這時(shí)預(yù)處理器會(huì)保留中間程序(#if與#endif行會(huì)消失),讓編譯器編譯中間行。
如果LEN_MAX <LenMax不成立,預(yù)處理器會(huì)將刪除#if到#endif中的程序(包括#if與#endif行),則編譯器會(huì)看不到中間的程序。
這樣的處理不會(huì)在目標(biāo)代碼中占用空間,減少程序運(yùn)行時(shí)間。它可以用于程序調(diào)試使用。

#if vs. if

條件編譯是C語言中預(yù)處理部分的內(nèi)容,它是編譯器編譯代碼時(shí)最先處理的部分,
條件編譯里面有判斷語句,比如 #if 、#else 、#elif 及 #endif
它的意思是如果宏條件符合,編譯器就編譯這段代碼,否則,編譯器就忽略這段代碼而不編譯,如

#define  A 0  //把A定義為0

#if (A > 1)

         printf("A > 1");  //編譯器沒有編譯該語句,該語句不生成匯編代碼

#elif (A == 1)

         printf("A == 1"); //編譯器沒有編譯該語句,該語句不生成匯編代碼

#else

         printf("A < 1");   //編譯器編譯了這段代碼,且生成了匯編代碼,執(zhí)行該語句

#endif

而 if 語句則不然,if 是 C 語言中的關(guān)鍵字,它根據(jù)表達(dá)式的計(jì)算結(jié)果來覺定執(zhí)行那個(gè)語句,它里面的每個(gè)分支都編譯了的, 如

#define A 0

if (A > 1)

     printf("A > 1");   //編譯器編譯該語句,但因?yàn)锳 == 0 未執(zhí)行

else if(A == 1)

   printf("A == 1");  //編譯器編譯該語句,但因?yàn)锳 == 0 未執(zhí)行

else

   printf("A < 1");  //編譯器編譯該語句,因?yàn)锳 == 0 故執(zhí)行

#if作為一個(gè)編譯“開關(guān)”,比如:

#if(條件滿足)
執(zhí)行代碼1
#else
執(zhí)行代碼2
#endif

條件編譯是根據(jù) 宏條件 選擇性地編譯語句,它是編譯器在編譯代碼時(shí)完成的;
條件語句是根據(jù)條件表達(dá)式選擇性地執(zhí)行語句,它是在程序運(yùn)行時(shí)進(jìn)行的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容