是否有一个宏来检查给定的函数是否存在

时间:2014-03-17 13:48:16

标签: c++ c function macros

我的应用程序正在使用库,此库有许多版本。我正在从这个库中调用一个函数。函数的名称是function_name(仅作为示例)在一个版本的库中,但在其他版本中,同一函数具有另一个名称another_function_name

是否存在检查给定函数是否存在的宏?

用法示例:

#ifexist function_name
#define MYFUNCTION function_name
#else
#define MYFUNCTION another_function_name
#endif

2 个答案:

答案 0 :(得分:3)

  

是否存在检查给定函数是否存在的宏?

没有。您正在查看将c ++源文件转换为可执行文件的过程的错误结束。宏处理很早就发生在这个过程中。解决外部引用和构建可执行文件是最后一步。预处理器不了解库。它甚至不知道功能。

该库至少应与您在源代码中#include的某些头文件相关联。您自己不应该声明该库提供的类和函数。构建良好的库还将定义指定库版本的预处理器符号。例如,标题some_library.h可以定义符号SOME_LIBRARY_MAJOR_VERSIONSOME_LIBRARY_MINOR_VERSION

您应该使用这些预处理器符号来确定应该调用哪个函数。假设您知道应该使用版本1.3及更早版本调用function_name,但another_function_name版本为1.4及更高版本。您可以创建基于库的版本ID宏定义的预处理器符号MYFUNCTION

#if (SOME_LIBRARY_MAJOR_VERSION == 1) && (SOME_LIBRARY_MINOR_VERSION <= 3)
#define MYFUNCTION function_name
#else
#define MYFUNCTION another_function_name
#endif

答案 1 :(得分:0)

我认为您正在寻找的行为是具有相同功能的多个实现。除非在代码中的另一个位置上给出了实现,否则链接器将使用由弱符号

给出的默认实现

http://en.wikipedia.org/wiki/Weak_symbol

相关问题