ifdef和 if的差別

2021-06-09 14:24:35 字數 808 閱讀 5323

最近專案要從windows平台移植到linux平台,所以做了很多相容性相關的工作。遇到乙個小問題,我想通過win32巨集來區分兩個平台,之前以外win32變數是自己定義到,所以我做了如下宣告:

#define win32 1 //1:windows, 0:linux

程式中這樣使用:

#if win32 1

//do something in windows

#else

//do something in linux

#endif

於是,把整個工程在linux平台下編譯一遍,出現了很多編譯錯誤,均來自於opencv到庫檔案,這是不能容忍的,為這個問題困擾了一天!

最終找到了答案,那是因為opencv在做相容性時,windows用的就是win32這個巨集,而且都是這樣使用的:

#ifdef win32  

//do something in windows

當程式中define了win32之後,就認為在linux下定義了win32,所以又去編譯windows相關的東西,顯然這是錯誤的。

所以,得出了結論:

1) win32巨集是windows系統自帶定義的巨集,可直接使用,不用再去define

2) #ifdef的意思表示只要定義了就為真,所以使用時直接#ifdef win32,並且如果#define var 1,那麼var就被定義,就可直接使用#ifdef var,而不管var是多少

3) #if的意思表示如果定義到巨集是否為0,這時就要看巨集到定義了,具體用時就是#if var 1.

乙個小的知識點,就可以困擾你一天,終於明白程式設計規範是多麼重要,謹記!

if和 ifdef的區別

學習stm32偶然發現 在keil中直接預先定義巨集use stdperiph driver,但是卻沒有指定巨集的值。而在標頭檔案中判斷用的是如下 1 ifdef use stdperiph driver 2 include stm32f4xx conf.h 3 endif use stdperip...

ifdef和 if的區別

1 ifdef只是判斷後面的識別符號有沒有定義,而不在乎識別符號的值,識別符號是0是1對它來說都沒有區別,只要預先定義了,執行 ifdef後的 2 ifdef是和 else搭配使用的,沒有 elif搭配之說 3 ifdef必須要有 endif配合使用 define iftest1 0 define ...

if和 ifdef的區別

學習stm32偶然發現 在keil中直接預先定義巨集use stdperiph driver,但是卻沒有指定巨集的值。而在標頭檔案中判斷用的是如下 1 ifdef use stdperiph driver 2 include stm32f4xx conf.h 3 endif use stdperip...