侵权投诉

订阅
纠错
加入自媒体

c语言边角料5:一个跨平台的头文件

2021-03-30 16:40
道哥分享
关注

一、前言

二、头文件

三、预定义的宏

四、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

1  2  下一页>  
声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:

粤公网安备 44030502002758号