#if 和#ifdef的區(qū)別

#define TARGET_LITTLE_ENDINA 1
#define TARGET_BIG_ENDINA   0

#ifdef TARGET_LITTLE_ENDINA
call little endina function
#else
call big endina function
#endif

不管把TARGET_LITTLE_ENDINATARGET_BIG_ENDINA定義成0或者1,甚至后面不寫這個0或者1 ,調(diào)用的都是little endina函數(shù),這段代碼是有問題的,就是沒有理解#if#ifdef之間的區(qū)別。

#if的使用說明
#if的后面接的是表達(dá)式,如果表達(dá)式為1,則編譯#if下面的代碼

#if (MAX==10)||(MAX==20)
 code...
#endif

它的作用是:如果(MAX==10)||(MAX==20)成立,那么編譯器就會把其中的#if 與 #endif之間的代碼編譯進(jìn)去(注意:是編譯進(jìn)去,不是執(zhí)行?。。?/p>

#ifdef的使用
#if后面接的是一個宏

#ifdef (x)
    ...code...
#endif

這個#ifdef 它不管里面的“x”的邏輯是“真”還是“假”,它只管這個程序前面的宏定義里面有沒有定義“x”這個宏(即在這里#define x 1和#define x 0等效,都等同于#define x),如果定義了x這個宏,那么編譯器會編譯中間的…code…否則直接忽視中間的…code…代碼。

總結(jié):

if defined() 的使用和#ifdef的用法一致

if !defined()又和 #ifndef 的用法一致。

最后強(qiáng)調(diào)兩點(diǎn):
第一:這幾個宏定義只是決定代碼塊是否被編譯!
第二:別忘了#endif

原文:https://blog.csdn.net/zhangchiytu/article/details/7563329

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

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