除了提供 Puppe 提到的静态字符串之外,通常的做法是提供一个宏来检索版本检查兼容性。例如,您可以具有以下宏(在头文件中声明以与您的库一起使用):
#define MYLIB_MAJOR_VERSION 1
#define MYLIB_MINOR_VERSION 2
#define MYLIB_REVISION 3
#define MYLIB_VERSION "1.2.3"
#define MYLIB_VERSION_CHECK(maj, min) ((maj==MYLIB_MAJOR_VERSION) && (min<=MYLIB_MINOR_VERSION))
通知与MYLIB_CHECK_VERSION
宏,我假设您想要一个特定的主要转速和一个次要转速大于或等于您所需的版本。根据您的应用程序的需要进行更改。
然后从调用应用程序中使用它,例如:
if (! MYLIB_VERSION_CHECK(1, 2)) {
fprintf(stderr, "ERROR: incompatible library version\n");
exit(-1);
}
这种方法将使版本信息来自包含的头文件。此外,它将在编译时针对调用应用程序进行优化。再做一点工作,您就可以从库本身中提取它。继续阅读...
您还可以使用此信息创建存储在库中的静态字符串,如 Puppe 所提到的。在你的库中放置这样的东西:
struct {
const char* string;
const unsigned major;
const unsigned minor;
const unsigned revision;
} mylib_version = {
MYLIB_VERSION, MYLIB_MAJOR_VERSION, MYLIB_MINOR_VERSION, MYLIB_REVISION
};
这将创建一个名为的结构mylib_version
在你的图书馆里。您可以使用它通过在库中创建函数并从调用应用程序访问这些函数等来进行进一步的验证。