我的应用程序正在使用库,此库有许多版本。我正在从这个库中调用一个函数。函数的名称是function_name
(仅作为示例)在一个版本的库中,但在其他版本中,同一函数具有另一个名称another_function_name
。
是否存在检查给定函数是否存在的宏?
用法示例:
#ifexist function_name
#define MYFUNCTION function_name
#else
#define MYFUNCTION another_function_name
#endif
答案 0 :(得分:3)
是否存在检查给定函数是否存在的宏?
没有。您正在查看将c ++源文件转换为可执行文件的过程的错误结束。宏处理很早就发生在这个过程中。解决外部引用和构建可执行文件是最后一步。预处理器不了解库。它甚至不知道功能。
该库至少应与您在源代码中#include
的某些头文件相关联。您自己不应该声明该库提供的类和函数。构建良好的库还将定义指定库版本的预处理器符号。例如,标题some_library.h
可以定义符号SOME_LIBRARY_MAJOR_VERSION
和SOME_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)
我认为您正在寻找的行为是具有相同功能的多个实现。除非在代码中的另一个位置上给出了实现,否则链接器将使用由弱符号
给出的默认实现