我有一个图书馆1-1.h。
#include <1-1.h>;
其中有一个结构:
struct bucket { ... }
不幸的是,这个库是3方的,他们已经在1.2中将struct bucket更改为bucket_t {...}。我的所有代码都使用了bucket,但我也希望它与bucket_t兼容。
是否可以:
#ifndef bucket
typedef bucket_t bucket;
#endif
(代码不起作用,但如果存在,我想将bucket设置为bucket_t。谢谢。
答案 0 :(得分:3)
一个选项是在项目或makefile中添加自己的预定义符号,以指定您正在使用的版本。像LIBRARY1_1或LIBRARY1_2之类的东西。如果两者都未定义报告错误。您可以使用自己的包含文件,如下所示。
如果您使用的每个版本的头文件都不同......
<强> my1-1.h 强>
#if defined( LIBRARY1_1 )
#include <1-1.h>
#elif defined( LIBRARY1_2 )
#include <1-2.h>
typedef bucket_t bucket
#else
#error Please define LIBRARY1_1 or LIBRARY1_2 before including this file
#endif
如果每个版本的标题使用相同的文件名...
<强> my1-1.h 强>
#include <1-1.h>
#if defined( LIBRARY1_1 )
#elif defined( LIBRARY1_2 )
typedef bucket_t bucket
#else
#error Please define LIBRARY1_1 or LIBRARY1_2 before including this file
#endif
答案 1 :(得分:0)
预处理器或多或少地知道该语言。
我会选择以下内容。 在包含库的源文件中,或者写一个标题以避免重复自己。
#if USE_LIBRARY_1_1
#include <1-1.h>
#elif USE_LIBRARY_1_2
#include <1-2.h>
typedef bucket_t bucket
#endif