#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_ENDINA
和TARGET_BIG_ENDINA
定義成0或者1,甚至后面不寫這個0或者1 ,調(diào)用的都是little endina
函數(shù),這段代碼是有問題的,就是沒有理解#if
和#ifdef
之間的區(qū)別。
#if
的使用說明
#if
的后面接的是表達式,如果表達式為1附帽,則編譯#if
下面的代碼
#if (MAX==10)||(MAX==20)
code...
#endif
它的作用是:如果(MAX==10)||(MAX==20)成立,那么編譯器就會把其中的#if 與 #endif之間的代碼編譯進去(注意:是編譯進去井誉,不是執(zhí)行=栋纭!)
#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 的用法一致。
最后強調(diào)兩點:
第一:這幾個宏定義只是決定代碼塊是否被編譯蔽午!
第二:別忘了#endif
原文:https://blog.csdn.net/zhangchiytu/article/details/7563329