|
#ifdef OS_GLOBALS....................................1
#define OS_EXT........................................2
#else..................................................3
#define OS_EXT extern................................4
#endif.................................................5
意思就是說,如果 OS_GLOBALS被定義,則本文件中的 OS_EXT被
替換為空(被忽略), 如果 OS_GLOBALS未被定義,則本文件中的
OS_EXT 被替換為 extern關(guān)鍵字. 意義比較明確, 就是給出了
本文件中哪些變量和函數(shù),在何時(shí)需要使用 extern引用 (取決
于其他文件中有無定義 OS_GLOBALS.
為方便你理解, 舉個(gè)例子.
現(xiàn)在有兩文件 AAA.c和 BBB.c
AAA.c內(nèi)容是
#define OS_GLOBALS
BBB.c內(nèi)容是
#ifdef OS_GLOBALS
#define OS_EXT
#else
#define OS_EXT extern
#endif
OS_EXT void function1(void);
如果AAA.c先于BBB.c編譯時(shí),OS_GLOBALS被定義,在BBB.c里,實(shí)際上是
void function1(void); // 聲明了自己的函數(shù)
如果BBB.c先于AAA.c編譯,則OS_GLOBALS被定義,在BBB.c里,實(shí)際上是
extern void function1(void); // 聲明了外部的一個(gè)函數(shù).
另外,你想了解的比較重要的是,為什么define后面可以只有一個(gè)名字,這個(gè)語句的意思就是,將XXXX替換為空(從文本上忽略).比如
#define OS_EXT
意思就是說,在本文件中,凡OS_EXT文本串,在編譯時(shí)都被替換成空白,被忽略,或者說刪除.然而,這不影響它作為#ifdef判斷的有效性,OS_EXT仍然是一個(gè)被define過的東西.就這個(gè)意思,應(yīng)該理解了吧.
|
|