C C 條件編譯

2022-07-23 07:45:13 字數 1503 閱讀 3404

條件編譯就是指有條件的編譯,即根據條件去編譯**,在編譯階段時就對**做出取捨,有的編譯,有的不編譯,這樣比寫成乙個個判斷函式更有效率,比如工程**大部分的地方都類似,只有個別語句因為使用的硬體版本不同,就可以使用條件編譯增加可移植性。

條件編譯的「條件」,可以是乙個表示式的值,也可以是乙個定義的巨集。

對於前者,如果該表示式為真,則編譯下面的**,為假則不編譯。對於後者,如果定義了該巨集,則編譯下面的**,未定義則不編譯。

後者的情況,最常見的就是標頭檔案使用的防止重複定義的寫法。

#ifndef _abcd_h_

#define _abcd_h_

/*......

*/#endif

首先,如果沒有定義_abcd_h_,就定義這個巨集,然後跟一段**,以「endif」結束。此「endif」對應的是開頭「ifndef」的「if」,把中間的所有**包裹起來。

那麼,編譯時把所有檔案包含起來,第一次編譯到此處時,會定義_abcd_h_並編譯下面的**。往下繼續編譯時,倘若有其它檔案引用了這個標頭檔案,會再次遇到這一段**,然後發現_adcd_h_已經被定義,所以「ifndef _adcd_h_」後面的**都不會編譯,這樣就防止了標頭檔案的重複定義。

通用條件編譯指令:

另外,想要取消巨集的定義,可以用「#undef」加巨集名來取消巨集定義。

定義三個匯率,第乙個是人民幣對美元,第二個是人民幣對歐元,第三個是人民幣是日元。

使用者輸入人民幣數量,輸出能換多少對應幣種。

使用巨集去控制程式換算哪種貨幣。

extra.h

#ifndef _extra_h_

#define _extra_h_#include

#define usd_per_cny (0.1422)

#define eur_per_cny (0.1278)

#define jpy_per_cny (15.4651)

#define exchange_usd 0

#define exchange_eur 1

#define exchange_jpy 2

#define current_exchange exchange_jpy

#endif

//_extra_h_

main.cpp

#include "

extra.h

"void

cal_exchange()

}int

main()

標頭檔案裡控制的巨集是「current_exchange」,條件編譯使用表示式,根據它的值是多少來編譯哪段**,值由其它巨集來決定。現在定義的是日元匯率,所以結果如下。

C C 條件編譯

出處 有些程式在除錯 相容性 平台移植等情況下可能想要通過簡單地設定一些引數就生成乙個不同的軟體,這當然可以通過變數設定,把所有可能用到的 都寫進去,在初始化時配置,但在不同的情況下可能只用到一部分 就沒必要把所有的 都寫進去,就可以用條件編譯,通過預編譯指令設定編譯條件,在不同的需要時編譯不同的 ...

C C 條件編譯

04 巨集定義 05 總結 條件編譯是指預處理器根據條件編譯指令,有條件地選擇源程式 中的一部分 作為輸出,送給編譯器進行編譯。主要是為了有選擇性地執行相應操作,防止巨集替換內容 如檔案等 的重複包含。常見的條件編譯指令如下 條件編譯指令 描述 description if如果條件為真,則執行相應操...

C C 複習之 條件編譯

條件編譯功能對於程式的移植和裁剪時很有用的,檢視過 cos 作業系統的核心源 裡面大量使用了條件編譯,方便使用者根據自個的需要,對系統核心進行裁剪。條件編譯的3種形式 1 ifdef 識別符號 程式段1 else 程式段2 endif作用 如果指定的識別符號已經被 define命令定義,則編譯程式段...