頭文件+宏,完美解決聲明函數(shù)問(wèn)題!
一、前言
我們平常在寫(xiě)代碼的時(shí)候,特別是在制造輪子的時(shí)候(為別人提供庫(kù)文件),會(huì)遇到各種不同的需求場(chǎng)景:
有些人需要在 Linux 系統(tǒng)下使用,有些人需要在 Windows 系統(tǒng)下使用;有些人使用 C 語(yǔ)言開(kāi)發(fā),有些人使用 C++ 來(lái)開(kāi)發(fā);有些人使用動(dòng)態(tài)庫(kù),有些人使用靜態(tài)庫(kù);
特別是在 Windows 系統(tǒng)中,庫(kù)文件中導(dǎo)出的函數(shù)需要使用 _declspec(dllexport) 來(lái)聲明函數(shù),而使用者在導(dǎo)入的時(shí)候,需要使用 _declspec(dllimport) 來(lái)聲明函數(shù),甚是麻煩!
這篇短文分享一個(gè)頭文件,利用這個(gè)頭文件,再加上幾個(gè)編譯期間傳遞的宏,就可以完美的處理剛才所說(shuō)的各種需求。
二、頭文件
先直接上代碼,可以先試著分析一下,后面我們?cè)僦鹨环治霾煌氖褂脠?chǎng)景。
這個(gè)頭文件的主要目的,就是定義一個(gè)宏:MY_API,然后把這個(gè)宏添加在庫(kù)文件中每一個(gè)需要導(dǎo)出的函數(shù)或者類(lèi)的聲明中即可。例如:
void MY_API do_work();
下面是頭文件:
_Pragma("once")
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
#define MY_WIN32
#elif defined(linux) || defined(__linux) || defined(__linux__)
#define MY_LINUX
#endif
#if defined(MY_WIN32)
#ifdef MY_API_STATIC
#ifdef __cplusplus
#define MY_API extern "C"
#else
#define MY_API
#endif
#else
#ifdef MY_API_EXPORTS
#ifdef __cplusplus
#define MY_API extern "C" __declspec(dllexport)
#else
#define MY_API __declspec(dllexport)
#endif
#else
#ifdef __cplusplus
#define MY_API extern "C" __declspec(dllimport)
#else
#define MY_API __declspec(dllimport)
#endif
#endif
#endif
#elif defined(MY_LINUX)
#ifdef __cplusplus
#define MY_API extern "C"
#else
#define MY_API
#endif
#endif
三、預(yù)定義的宏
假設(shè)需要寫(xiě)一個(gè)庫(kù)文件,提供給別人使用。定義了上面這個(gè)頭文件之后,其他的文件中都要 include 這個(gè)頭文件。
1. 平臺(tái)宏定義
不同的平臺(tái)預(yù)定義了相應(yīng)的宏定義,例如:
Windows 平臺(tái):WIN32, _WIN32, WIN32;
Linux 平臺(tái):linux, __linux, linux;
在一個(gè)確定的平臺(tái)上,這些宏不一定全部定義,很可能只有其中的某一個(gè)宏是被定義的。
為了統(tǒng)一性,我們?cè)陬^文件的剛開(kāi)始部分,把這些可能的宏統(tǒng)一起來(lái),定義我們出我們自己的平臺(tái)宏定義:MY_WIN32 或者是 MY_LINUX,后面需要區(qū)分不同的平臺(tái)時(shí),就用這個(gè)自己定義的平臺(tái)宏。
當(dāng)然,還可以繼續(xù)擴(kuò)充出其他平臺(tái),例如:MY_M(jìn)AC, MY_ARM 等等。

發(fā)表評(píng)論
登錄
手機(jī)
驗(yàn)證碼
立即登錄即可訪(fǎng)問(wèn)所有OFweek服務(wù)
還不是會(huì)員?免費(fèi)注冊(cè)
忘記密碼請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)
圖片新聞
-
機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹(shù)機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-
存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-
長(zhǎng)安汽車(chē)母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-
豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-
字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
-
員工持股爆雷?廣汽埃安緊急回應(yīng)
-
中國(guó)“智造”背后的「關(guān)鍵力量」
-
小米汽車(chē)研發(fā)中心重磅落地,寶馬家門(mén)口“搶人”
最新活動(dòng)更多
-
10月23日火熱報(bào)名中>> 2025是德科技創(chuàng)新技術(shù)峰會(huì)
-
10月23日立即報(bào)名>> Works With 開(kāi)發(fā)者大會(huì)深圳站
-
10月24日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
11月27日立即報(bào)名>> 【工程師系列】汽車(chē)電子技術(shù)在線(xiàn)大會(huì)
-
12月18日立即報(bào)名>> 【線(xiàn)下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
精彩回顧立即查看>> 【限時(shí)福利】TE 2025國(guó)際物聯(lián)網(wǎng)展·深圳站
推薦專(zhuān)題
- 1 人形機(jī)器人,正狂奔在批量交付的曠野
- 2 宇樹(shù)機(jī)器人撞人事件的深度剖析:六維力傳感器如何成為人機(jī)安全的關(guān)鍵屏障
- 3 解碼特斯拉新AI芯片戰(zhàn)略 :從Dojo到AI5和AI6推理引擎
- 4 AI版“四萬(wàn)億刺激”計(jì)劃來(lái)了
- 5 2025年8月人工智能投融資觀察
- 6 7 a16z最新AI百?gòu)?qiáng)榜:硅谷頂級(jí)VC帶你讀懂全球生成式AI賽道最新趨勢(shì)
- 8 一家被嚴(yán)重低估的國(guó)產(chǎn)AI巨頭
- 9 Manus跑路,大廠掉線(xiàn),只能靠DeepSeek了
- 10 地平線(xiàn)的野心:1000萬(wàn)套HSD上車(chē)