#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)行的。