头文件+宏,完美解决声明函数问题!
头文件+宏,完美解决声明函数问题!一、前言我们平常在写代码的时候,特别是在制造轮子的时候(为别人提供库文件),会遇到各种不同的需求场景:有些人需要在 Linux 系统下使用,有些人
一、前言
我们平常在写代码的时候,特别是在制造轮子的时候(为别人提供库文件),会遇到各种不同的需求场景:
有些人需要在 Linux 系统下使用,有些人需要在 Windows 系统下使用;有些人使用 C 语言开发,有些人使用 C++ 来开发;有些人使用动态库,有些人使用静态库;
特别是在 Windows 系统中,库文件中导出的函数需要使用 _declspec(dllexport) 来声明函数,而使用者在导入的时候,需要使用 _declspec(dllimport) 来声明函数,甚是麻烦!
这篇短文分享一个头文件,利用这个头文件,再加上几个编译期间传递的宏,就可以完美的处理刚才所说的各种需求。
二、头文件
先直接上代码,可以先试着分析一下,后面我们再逐一分析不同的使用场景。
这个头文件的主要目的,就是定义一个宏:MY_API,然后把这个宏添加在库文件中每一个需要导出的函数或者类的声明中即可。例如:
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
三、预定义的宏
假设需要写一个库文件,提供给别人使用。定义了上面这个头文件之后,其他的文件中都要 include 这个头文件。
1. 平台宏定义
不同的平台预定义了相应的宏定义,例如:
Windows 平台:WIN32, _WIN32, WIN32;
Linux 平台:linux, __linux, linux;
在一个确定的平台上,这些宏不一定全部定义,很可能只有其中的某一个宏是被定义的。
为了统一性,我们在头文件的刚开始部分,把这些可能的宏统一起来,定义我们出我们自己的平台宏定义:MY_WIN32 或者是 MY_LINUX,后面需要区分不同的平台时,就用这个自己定义的平台宏。
当然,还可以继续扩充出其他平台,例如:MY_MAC, MY_ARM 等等。
首页 下一页 上一页 尾页-
如何使用OpenCV+Keras+Tensorflow实现去噪算法与自定义预处理函数2021-03-28
-
UI5.0重新定义游戏智屏系统2021-03-27
-
全场景解决方案重新定义生活的全部2021-03-24
-
数据决定体验、软件定义汽车2021-03-22
-
软件定义的汽车,梅赛德斯-奔驰开启全屏时代!2021-03-19
-
3·15来袭,“软件定义汽车”后催生质量问题新痛点2021-03-15
-
地平线MAPS评测方法迎来标准立项 重新定义AI芯片性能评估2021-03-12
-
京东物流:定义新型物流,打开上市想象空间2021-03-09
-
如何提高代码逼格?宏定义-从入门到放弃2021-03-04
-
新一代折叠旗舰华为Mate X2发布,定义折叠旗舰行业标准2021-02-23
-
工业互联网:2021将是“软件定义工控”拐点之年2021-02-08
-
梅赛德斯-奔驰S级上市,不定义旗舰豪华全新标准!2021-01-30
-
熵基科技重磅发布四大门禁系列新品 重新定义门禁安全2021-01-27
-
协作机器人定义及竞争现状2021-01-13
-
比亚迪重新定义以电主导的混动技术2021-01-13