頭文件+宏,完美解決聲明函數(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ù)或者類的聲明中即可。例如:
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)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
7月8日立即報(bào)名>> 【在線會(huì)議】英飛凌新一代智能照明方案賦能綠色建筑與工業(yè)互聯(lián)
-
7月22-29日立即報(bào)名>> 【線下論壇】第三屆安富利汽車生態(tài)圈峰會(huì)
-
7.30-8.1火熱報(bào)名中>> 全數(shù)會(huì)2025(第六屆)機(jī)器人及智能工廠展
-
7月31日免費(fèi)預(yù)約>> OFweek 2025具身智能機(jī)器人產(chǎn)業(yè)技術(shù)創(chuàng)新應(yīng)用論壇
-
免費(fèi)參會(huì)立即報(bào)名>> 7月30日- 8月1日 2025全數(shù)會(huì)工業(yè)芯片與傳感儀表展
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書(shū)》
推薦專題
- 1 AI 眼鏡讓百萬(wàn) APP「集體失業(yè)」?
- 2 豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
- 3 一文看懂視覺(jué)語(yǔ)言動(dòng)作模型(VLA)及其應(yīng)用
- 4 “支付+”時(shí)代,支付即生態(tài) | 2025中國(guó)跨境支付十大趨勢(shì)
- 5 中國(guó)最具實(shí)力AI公司TOP10
- 6 特斯拉Robotaxi上路,馬斯克端上畫(huà)了十年的餅
- 7 深圳跑出40億超級(jí)隱形冠軍:賣機(jī)器人年入6.1億,港股上市
- 8 張勇等人退出阿里合伙人
- 9 “AI六小虎”到了下一個(gè)賽點(diǎn)
- 10 AI的夏天:第四范式VS云從科技VS地平線機(jī)器人