C/C++中常見的#if、if、#ifdef、#if define等區別
#if 與 if
條件編譯是C語言中預處理部分的內容,它是編譯器編譯程式碼時最先處理的部分,
條件編譯裡面有判斷語句,比如 #if 、#else 、#elif 及 #endif
它的意思是如果巨集條件符合,編譯器就編譯這段程式碼,否則,編譯器就忽略這段程式碼而不編譯,如
- printf("A > 1"); //編譯器沒有編譯該語句,該語句不生成彙編程式碼
- printf("A == 1"); //編譯器沒有編譯該語句,該語句不生成彙編程式碼
- printf("A < 1"
而 if 語句則不然,if 是 C 語言中的關鍵字,它根據表示式的計算結果來覺定執行那個語句,它裡面的每個分支都編譯了的, 如
- if (A > 1)
- printf("A > 1"); //編譯器編譯該語句,但因為A == 0 未執行
- else if(A == 1)
- printf("A == 1"); //編譯器編譯該語句,但因為A == 0 未執行
- else
- printf("A < 1"); //編譯器編譯該語句,因為A == 0 故執行
作為一個編譯“開關”(常用來註釋程式碼),比如:
- 執行程式碼1
- 執行程式碼2
假如編譯時,確實滿足條件(結果非0時),則生成的程式檔案(.exe檔案)中不會有執行程式碼2的。如果用普通if語句,生成的程式檔案就會有執行程式碼2,這個區別看看生成檔案大小就可以知道。如果你的條件在程式編譯前就已經確定了,那就用#if;如果條件需要在程式執行過程中才能判斷,則用if。
所以 簡單地講,條件編譯是根據 巨集條件 選擇性地編譯語句,它是編譯器在編譯程式碼時完成的;
條件語句是根據條件表示式選擇性地執行語句,它是在程式執行時進行的。
#if的使用說明
#if的後面接的是表示式
- code...
它的作用是:如果(MAX==10)||(MAX==20)成立,那麼編譯器就會把其中的#if 與 #endif之間的程式碼編譯進去(注意:是編譯進去,不是執行!!)
#if defined的使用
#if後面接的是一個巨集。
- ...code...
這個#if defined它不管裡面的“x”的邏輯是“真”還是“假”它只管這個程式的前面的巨集定義裡面有沒有定義“x”這個巨集,如果定義了x這個巨集,那麼,編譯器會編譯中間的…code…否則不直接忽視中間的…code…程式碼。
另外 #if defined(x)也可以取反,也就用 #if !defined(x)
#ifdef的使用
#ifdef的使用和#if defined()的用法一致
#ifndef又和#if !defined()的用法一致。
最後強調兩點:
第一:這幾個巨集定義只是決定程式碼塊是否被編譯!
第二:別忘了#endif