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

本文介绍了一个头文件,通过预定义宏解决在Windows和Linux平台间,C/C++库文件导出导入的问题。针对不同平台和编译需求,定义了MY_API宏,简化了动态库和静态库的函数导出声明。文章详细解析了宏的用法和不同场景的应用。
摘要由CSDN通过智能技术生成

一、前言

二、头文件

三、预定义的宏

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值