4日10日 OFweek 2025(第十四届)中国机器人产业大会
立即报名 >>>
7.30-8.1 全数会2025(第六届)机器人及智能工厂展
火热报名中>>
c语言边角料5:一个跨平台的头文件
一、前言
二、头文件
三、预定义的宏
四、Windows 平台场景分析
五、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

图片新闻
技术文库
最新活动更多
-
3月27日立即报名>> 【工程师系列】汽车电子技术在线大会
-
4月1日立即下载>> 【村田汽车】汽车E/E架构革新中,新智能座舱挑战的解决方案
-
4日10日立即报名>> OFweek 2025(第十四届)中国机器人产业大会
-
即日-4.22立即报名>> 【在线会议】汽车腐蚀及防护的多物理场仿真
-
4月25日立即报名>> 【线下论坛】新唐科技2025新品发布会
-
4月30日立即参与 >> 【白皮书】研华机器视觉项目召集令
推荐专题
-
1 HBM4大战
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论