当前位置: 智能网 > 人工智能 > 头文件+宏,完美解决声明函数问题!

头文件+宏,完美解决声明函数问题!

放大字体 缩小字体 发布日期:2021-03-30 18:02:47   浏览次数:166
核心提示:2021年03月30日关于头文件+宏,完美解决声明函数问题!的最新消息:一、前言我们平常在写代码的时候,特别是在制造轮子的时候(为别人提供库文件),会遇到各种不同的需求场景:有些人需要在 Linux 系统下使用,有些人需要在 Windows 系统下使用


一、前言

我们平常在写代码的时候,特别是在制造轮子的时候(为别人提供库文件),会遇到各种不同的需求场景:

有些人需要在 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 等等。

 
关键词: 编译器 定义 头文件

[ 智能网搜索 ]  [ 打印本文 ]  [ 违规举报

猜你喜欢

 
推荐图文
ITECH直流电源在人工智能领域的应用 基于朴素贝叶斯自动过滤垃圾广告
2020年是人工智能相关业务发展的重要一年 我国人工智能市场规模、行业短板、发展前景一览
推荐智能网
点击排行

 
 
新能源网 | 锂电网 | 智能网 | 环保设备网 | 联系方式