找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3015|回復: 0
打印 上一主題 下一主題
收起左側

關于define的用法

[復制鏈接]
跳轉到指定樓層
樓主
ID:73735 發(fā)表于 2015-2-19 00:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#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關鍵字. 意義比較明確, 就是給出了
本文件中哪些變量和函數(shù),在何時需要使用 extern引用 (取決
于其他文件中有無定義 OS_GLOBALS.
為方便你理解, 舉個例子.
現(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編譯時,OS_GLOBALS被定義,在BBB.c里,實際上是
void function1(void); // 聲明了自己的函數(shù)
如果BBB.c先于AAA.c編譯,則OS_GLOBALS被定義,在BBB.c里,實際上是
extern void function1(void); // 聲明了外部的一個函數(shù).


另外,你想了解的比較重要的是,為什么define后面可以只有一個名字,這個語句的意思就是,將XXXX替換為空(從文本上忽略).比如
#define OS_EXT
意思就是說,在本文件中,凡OS_EXT文本串,在編譯時都被替換成空白,被忽略,或者說刪除.然而,這不影響它作為#ifdef判斷的有效性,OS_EXT仍然是一個被define過的東西.就這個意思,應該理解了吧.


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表