精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C語言邊角料5:一個(gè)跨平臺(tái)的頭文件

開發(fā) 后端
這篇短文分享一個(gè)頭文件,利用這個(gè)頭文件,再加上幾個(gè)編譯期間傳遞的宏,就可以完美的處理剛才所說的各種需求。

[[390476]]

一、前言

我們平常在寫代碼的時(shí)候,特別是在制造輪子的時(shí)候(為別人提供庫文件),會(huì)遇到各種不同的需求場(chǎng)景:

  1. 有些人需要在 Linux 系統(tǒng)下使用,有些人需要在 Windows 系統(tǒng)下使用;
  2. 有些人使用 C 語言開發(fā),有些人使用 C++ 來開發(fā);
  3. 有些人使用動(dòng)態(tài)庫,有些人使用靜態(tài)庫;

特別是在 Windows 系統(tǒng)中,庫文件中導(dǎo)出的函數(shù)需要使用 _declspec(dllexport) 來聲明函數(shù),而使用者在導(dǎo)入的時(shí)候,需要使用 _declspec(dllimport) 來聲明函數(shù),甚是麻煩!

這篇短文分享一個(gè)頭文件,利用這個(gè)頭文件,再加上幾個(gè)編譯期間傳遞的宏,就可以完美的處理剛才所說的各種需求。

二、頭文件

先直接上代碼,可以先試著分析一下,后面我們?cè)僦鹨环治霾煌氖褂脠?chǎng)景。

這個(gè)頭文件的主要目的,就是定義一個(gè)宏:MY_API,然后把這個(gè)宏添加在庫文件中每一個(gè)需要導(dǎo)出的函數(shù)或者類的聲明中即可。例如:

  1. void MY_API do_work(); 

下面是頭文件:

  1. _Pragma("once"
  2.  
  3. #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) 
  4.     #define MY_WIN32 
  5. #elif defined(linux) || defined(__linux) || defined(__linux__) 
  6.     #define MY_LINUX 
  7. #endif 
  8.  
  9. #if defined(MY_WIN32) 
  10.     #ifdef MY_API_STATIC 
  11.       #ifdef __cplusplus 
  12.          #define MY_API extern "C" 
  13.       #else 
  14.          #define MY_API 
  15.       #endif 
  16.    #else 
  17.       #ifdef MY_API_EXPORTS 
  18.          #ifdef __cplusplus 
  19.             #define MY_API extern "C" __declspec(dllexport) 
  20.          #else 
  21.             #define MY_API __declspec(dllexport) 
  22.          #endif 
  23.       #else 
  24.          #ifdef __cplusplus 
  25.             #define MY_API extern "C" __declspec(dllimport) 
  26.          #else 
  27.             #define MY_API __declspec(dllimport) 
  28.          #endif 
  29.       #endif 
  30.    #endif 
  31. #elif defined(MY_LINUX) 
  32.     #ifdef __cplusplus 
  33.        #define MY_API extern "C" 
  34.     #else 
  35.        #define MY_API 
  36.     #endif 
  37. #endif 

三、預(yù)定義的宏

假設(shè)需要寫一個(gè)庫文件,提供給別人使用。定義了上面這個(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è)陬^文件的剛開始部分,把這些可能的宏統(tǒng)一起來,定義我們出我們自己的平臺(tái)宏定義:MY_WIN32 或者是 MY_LINUX,后面需要區(qū)分不同的平臺(tái)時(shí),就用這個(gè)自己定義的平臺(tái)宏。

當(dāng)然,還可以繼續(xù)擴(kuò)充出其他平臺(tái),例如:MY_MAC, MY_ARM 等等。

2. 編譯器宏定義

如果在寫庫代碼的時(shí)候,使用的是 C++,而使用者使用的是 C 語言,那么就需要對(duì)庫函數(shù)進(jìn)行extern “C” 聲明,讓編譯器不要對(duì)函數(shù)的名稱進(jìn)行改寫。

編譯器 g++ 預(yù)定義了宏 __cplusplus,因此,在頭文件中,就利用了這個(gè)宏,在 MY_API 中添加 extern "C" 聲明。

四、Windows 平臺(tái)場(chǎng)景分析

1. 編譯生成庫文件

(1) 生成靜態(tài)庫

在靜態(tài)庫中,不需要 __declspec(dllexport/dllimport) 的聲明,因此只需要區(qū)分編譯器即可(gcc or g++),在編譯選項(xiàng)中定義宏 MY_API_STATIC,即可得到最終的 MY_API 為:

  • gcc 編譯器:#define MY_API
  • g++ 編譯器:#define MY_API extern "C"

(2) 生成動(dòng)態(tài)庫

在編譯選項(xiàng)中,定義宏 MY_API_EXPORTS,這樣最終得到的 MY_API 就會(huì)變成:

  • gcc 編譯器:#define MY_API __declspec(dllexport)
  • g++ 編譯器:#define MY_API extern "C" __declspec(dllexport)

2. 使用庫

在使用庫的應(yīng)用程序中,也需要在代碼中 include 這個(gè)頭文件,然后加上編譯選項(xiàng)中定義的各種宏,來生成對(duì)應(yīng)的 MY_API 宏定義。

(1) 使用靜態(tài)庫

需要在編譯選項(xiàng)中定義 MY_API_STATIC,即可得到最終的 MY_API 為:

  • gcc 編譯器:#define MY_API
  • g++ 編譯器:#define MY_API extern "C"

(2) 使用動(dòng)態(tài)庫

在編譯選項(xiàng)中不需要任何宏定義,即可得到最終的 MY_API 為:

  • gcc 編譯器:#define MY_API extern "C" __declspec(dllimport)
  • g++ 編譯器:#define MY_API __declspec(dllimport)

這樣就相當(dāng)于聲明導(dǎo)入庫函數(shù)了。

 

五、Linux 平臺(tái)場(chǎng)景分析

Linux 平臺(tái)下就簡(jiǎn)單多了,只需要注意編譯器的問題,而沒有導(dǎo)出和導(dǎo)入之分。

 

責(zé)任編輯:姜華 來源: IOT物聯(lián)網(wǎng)小鎮(zhèn)
相關(guān)推薦

2021-03-26 11:29:58

C語言PragmaAPI

2021-03-22 11:27:06

C語言Peterson(皮特互斥鎖

2021-03-24 08:02:58

C語言

2021-05-11 11:31:52

C語言類型指針

2010-01-19 15:18:12

C++語言

2014-03-12 10:00:26

移動(dòng)開發(fā)跨平臺(tái)

2012-06-27 17:30:03

VisionMobil跨平臺(tái)開發(fā)工具

2015-03-17 09:59:41

跨平臺(tái)

2021-02-01 17:29:19

FlutterHello World開發(fā)

2021-06-23 06:12:38

Subtitld編輯器開源

2025-09-22 04:00:00

2022-11-21 07:57:56

cmake工程模板

2021-11-15 14:42:20

Motrix下載管理器開源

2015-06-30 08:37:12

ASP.NET.NET

2023-12-07 12:59:46

C語言循環(huán)隊(duì)列代碼

2021-01-14 08:55:20

C語言編程

2018-11-09 09:40:52

2013-05-27 09:47:33

Java開發(fā)Java跨平臺(tái)

2010-01-25 17:55:38

C++頭文件

2023-02-26 23:49:17

Go語言監(jiān)聽?zhēng)?/a>
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国模人体一区二区| 亚洲系列中文字幕| 精品久久久91| 国产96在线 | 亚洲| 91成品人影院| 精品一区二区三区中文字幕老牛| 国产一区二区在线看| 日韩第一页在线| 国产成人免费高清视频| 中国一级特黄视频| 九色精品91| 亚洲va欧美va人人爽| 成人在线观看视频网站| 国产又大又粗又爽的毛片| а√天堂资源官网在线资源| 欧美gay男男猛男无套| 欧美日韩在线第一页| 成人国产1314www色视频| 欧美一区二区三区爽爽爽| 91欧美精品| 国产欧美日韩精品在线| 日本电影亚洲天堂| 你懂的在线观看网站| 搞黄网站在线看| 国产精品综合网| 免费97视频在线精品国自产拍| 污版视频在线观看| 黄色免费在线播放| 丝袜亚洲另类欧美| 亚洲欧美制服第一页| 丁香啪啪综合成人亚洲| 日本大臀精品| 日韩国产精品久久久| 亚洲人午夜精品免费| 国模大尺度视频| 牛牛精品在线| 99久久婷婷国产综合精品 | www,av在线| 香蕉视频网站在线观看| 久久er99热精品一区二区| 日韩中文字幕第一页| 超碰在线资源站| 成人亚洲视频| 欧美主播一区二区三区| 正义之心1992免费观看全集完整版| 这里只有精品999| 天天av综合| 欧美大片在线观看一区| 日韩精品在线观看av| 蜜桃av中文字幕| 免费日韩av片| 一二美女精品欧洲| 中文字幕资源在线观看| 欧美性video| 亚洲日本在线天堂| 九九九热999| 精品国产青草久久久久96| 日韩亚洲在线| 日韩在线免费高清视频| 日本黄色www| 精品欧美视频| 欧美日韩另类在线| 18岁网站在线观看| 欧美黑人激情| 97se亚洲国产综合自在线观| 国产高清在线不卡| 中文字幕在线观看成人| 网曝91综合精品门事件在线| 精品视频123区在线观看| 精品久久久无码人妻字幂| 四虎在线视频| 国产自产2019最新不卡| 成人黄色av网站| 国产草草影院ccyycom| 午夜在线一区二区| 欧美中文字幕在线| 在线观看免费视频a| 99精品热6080yy久久| 7777精品久久久久久| 免费观看特级毛片| 精品按摩偷拍| 欧美一区二区大片| 日本va中文字幕| 2021中文字幕在线| 亚洲欧洲99久久| 欧美大香线蕉线伊人久久国产精品 | 久久香蕉国产| 欧美激情aaaa| 亚洲一二三四五六区| 自拍欧美日韩| 日韩专区在线播放| 国产主播在线观看| 亚洲欧美色图| 91精品国产高清自在线| 亚洲天堂中文在线| 播五月开心婷婷综合| 91成人伦理在线电影| 伊人久久成人网| 国产精品亚洲人在线观看| 久久久久久九九| 黄色免费在线看| 国产精品电影院| 天堂精品一区二区三区| 完全免费av在线播放| 一个色妞综合视频在线观看| 宅男一区二区三区| 妞干网免费在线视频| 亚洲一卡二卡三卡四卡| 免费观看亚洲视频| 欧美三级精品| 色婷婷亚洲精品| 成年人视频在线免费| 精品国产三区在线| 亚洲女人天堂成人av在线| 中文字字幕码一二三区| 夜夜春成人影院| 亚洲摸下面视频| 岛国毛片在线观看| 美女精品一区二区| 91干在线观看| 精品国产av一区二区三区| 久久99国产精品久久99果冻传媒| 精品欧美一区二区久久久伦 | 国产激情视频一区二区三区欧美| 国产男女猛烈无遮挡91| 中文字幕网址在线| 99re视频精品| 人妻激情另类乱人伦人妻 | 韩国19禁主播vip福利视频| 欧美a级片免费看| 色喇叭免费久久综合网| www国产亚洲精品久久网站| 91浏览器在线观看| 国产精品综合| 国产精品福利久久久| 涩涩视频在线观看| 久久中文字幕电影| 亚洲精品久久区二区三区蜜桃臀 | 18国产精品| 精品国产第一区二区三区观看体验| 免费不卡的av| 深爱激情综合| 9.1国产丝袜在线观看| 欧美一级特黄aaaaaa| 亚洲精品免费在线观看| 欧美日韩福利在线| 精品一区二区三区视频在线播放 | 日韩美女在线视频 | 国产区高清在线| 中文字幕中文字幕一区二区| 久草福利视频在线| 日韩在线网址| 亚洲欧美国产日韩天堂区| 在线观看免费国产视频| 91视视频在线直接观看在线看网页在线看 | 亚洲中文字幕无码不卡电影| 高清亚洲高清| 在线免费观看羞羞视频一区二区| 亚洲av无码不卡| 国产另类ts人妖一区二区| 中文字幕一区二区三区5566| 宅男噜噜噜66国产精品免费| 亚洲第一福利网站| 国产又粗又硬视频| 亚洲国产专区| 国产日韩综合一区二区性色av| 成人小说亚洲一区二区三区| 亚洲国产精品一区二区久久| 日韩在线一区视频| 亚洲免费二区| 国内一区在线| 97caopron在线视频| 欧美性色视频在线| 国产免费无码一区二区| 日韩精品中文字幕第1页| 国产一区二区在线播放| 手机在线免费看av| 欧美日韩高清一区二区| 无码人妻精品一区二区三应用大全| 午夜亚洲影视| 在线观看一区二区三区三州| 2023国产精华国产精品| 国产成人av在线| 国产精品剧情| 日韩乱码在线视频| 国产无遮无挡120秒| 91视频www| 亚洲高清免费在线观看| 九九视频精品全部免费播放| 国产欧美亚洲精品| segui88久久综合9999| 国产一区二区三区在线免费观看| 国产精品一级二级| 国产精品理论在线观看| 国产精品69页| 中文字幕免费一区二区三区| 精品午夜一区二区| 99精品女人在线观看免费视频 | 日韩三级在线播放| 狠狠躁少妇一区二区三区| 国产香蕉精品视频一区二区三区 | 天堂8中文在线最新版在线| 欧美一级国产精品| 羞羞在线观看视频| av一区二区三区在线| 福利片一区二区三区| 欧美色网址大全| 国产成人综合av| 不卡的av影片| 日韩一区二区福利| 亚洲av电影一区| 精品久久久久久久久国产字幕| 无码人妻丰满熟妇区毛片蜜桃精品 | 亚洲最新av网站| 亚洲国产婷婷综合在线精品| 中文字幕黄色网址| 久久人人97超碰com| 精品人妻人人做人人爽夜夜爽| 日韩二区在线观看| heyzo国产| 欧美日韩一区二区高清| 97免费资源站| 美女视频一区| 精品精品国产国产自在线| 精品99又大又爽又硬少妇毛片| 日韩三级视频在线观看| 一级片在线免费观看视频| 色欲综合视频天天天| 粉嫩aⅴ一区二区三区| 一区二区在线观看av| 免费黄色激情视频| 国产精品国产三级国产三级人妇| 国产精品无码久久久久一区二区| 日日骚欧美日韩| 自慰无码一区二区三区| 激情一区二区| 日韩欧美电影一区二区| 国产精品视屏| 国产91成人video| av在线二区| 日韩一级免费一区| 国产伦精品一区二区三区视频痴汉| 欧美性大战xxxxx久久久| 很污很黄的网站| 国产精品久久久久久久久图文区| 国产人妻人伦精品1国产丝袜| 久久久久中文| 在线不卡国产精品| 国产中文字幕在线观看| 亚洲欧美中文另类| 国产日本在线| 伊人久久男人天堂| 2021av在线| 欧美成人直播| 最新国产精品久久| 亚洲电影在线一区二区三区| 国产日韩一区二区| 国产一区二区av在线| 17婷婷久久www| av网址在线免费观看| 日韩av在线免费观看一区| 午夜一区在线观看| 久久久久毛片免费观看| 欧美一二三区精品| www天堂在线| 亚洲高清久久网| 国产叼嘿视频在线观看| 亚洲福利精品在线| 欧美孕妇性xxxⅹ精品hd| 亚洲欧美综合区自拍另类| 欧美美乳在线| 欧美人伦禁忌dvd放荡欲情| 中文字幕xxxx| 夜夜嗨av一区二区三区| 国产精品成人aaaa在线| 欧美日韩中文字幕日韩欧美| 日韩精品视频免费看| 成人免费在线视频| 欧美人妻一区二区| 国产日产欧美一区| 国产成人无码一区二区在线观看| 久久网这里都是精品| 日韩欧美黄色网址| 一区二区免费在线播放| 久久久免费高清视频| 国产精品乱码一区二区三区软件| 婷婷色中文字幕| 色综合天天综合狠狠| 91国偷自产中文字幕久久| 欧美女孩性生活视频| 久久久久久久久久一级| 欧美一区二区三区在| 色wwwwww| 日韩三级视频中文字幕| 亚洲欧洲视频在线观看| 色综合伊人色综合网站| 91.xxx.高清在线| 欧美国产日韩中文字幕在线| 成人黄色免费短视频| 97国产精品视频| 成人四虎影院| 久久偷看各类wc女厕嘘嘘偷窃| 久久久久久爱| 四虎永久国产精品| 国产精品乱看| 国产女同无遮挡互慰高潮91| 91玉足脚交白嫩脚丫在线播放| 久草视频手机在线| 日韩一区在线看| 国产在线观看99| 欧美二区乱c少妇| 国产在线自天天| 欧美另类极品videosbest最新版本| 毛片在线看片| 日本精品久久久久影院| 中文在线资源| 国产日本欧美一区二区三区| 一区二区小说| 免费拍拍拍网站| 久久91精品久久久久久秒播| 法国伦理少妇愉情| 亚洲超碰97人人做人人爱| 国产巨乳在线观看| 国产性色av一区二区| 女厕盗摄一区二区三区| 国产精品福利视频| 日本成人片在线| 久久99久久99精品蜜柚传媒| 国内激情久久| 成年网站在线免费观看| 狠狠色狠狠色合久久伊人| 日本成人在线免费| 亚洲人精品一区| 最近中文字幕免费在线观看| 亚洲四色影视在线观看| 亚洲精品福利电影| 久久99国产精品| 国产视频欧美| 亚洲一区二区三区综合| 欧美国产日本韩| 亚洲一级理论片| 亚洲一区在线视频观看| 国产剧情精品在线| 久久中文字幕在线视频| 精品捆绑调教一区二区三区| 国产99在线播放| 黄色av成人| 91丨porny丨对白| 亚洲精品视频一区二区| 精品无码人妻一区二区三区| 色婷婷综合久久久中文一区二区| 日本在线丨区| 日韩免费在线观看视频| 欧美视频免费| 精品亚洲视频在线| 一区二区三区在线观看国产| 亚洲高清视频在线播放| 亚洲精品综合精品自拍| 天堂中文最新版在线中文| 久久久久久一区| 日韩精品一区第一页| 国产小视频你懂的| 日韩一区二区高清| 爱啪视频在线观看视频免费| 久久伊人资源站| 日本视频一区二区| 美女露出粉嫩尿囗让男人桶| 中文成人综合网| 亚洲午夜无码久久久久| 精品国产拍在线观看| 成人免费观看49www在线观看| 国产日韩视频在线播放| 久久在线精品| 亚洲一级理论片| 精品免费国产一区二区三区四区| 亚洲成人黄色片| 欧美一区二区色| 91一区二区| 1314成人网| 日本一区二区高清| 国产区精品在线| 色阁综合伊人av| 日本综合精品一区| 韩国无码av片在线观看网站| 91蜜桃网址入口| 国产又粗又猛又爽又黄的视频一| 超薄丝袜一区二区| 亚洲第一二区| 国产97色在线 | 日韩| 亚洲精品写真福利| 国内精品在线视频| 国产主播喷水一区二区| 亚洲啪啪91| 久久久久久久麻豆| 亚洲精品之草原avav久久| 北岛玲精品视频在线观看| 99视频在线免费播放| 粉嫩嫩av羞羞动漫久久久| a在线视频播放观看免费观看| 亚洲国产精品福利|