5

我有一个图书馆 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。谢谢。

4

2 回答 2

3

一种选择是在您的项目或生成文件中添加您自己的预定义符号,以指定您使用的版本。类似于 LIBRARY1_1 或 LIBRARY1_2。如果两者都没有定义,则报告错误。您可以使用自己的包含文件来执行此操作,如下所示。

如果您使用的每个版本的头文件都不同...

我的1-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

如果每个版本的标题使用相同的文件名...

我的1-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
于 2013-06-24T21:00:46.717 回答
0

预处理器或多或少对语言一无所知。

我会选择以下内容。要么在包含库的源文件中,要么写一个头文件以避免重复自己。

#if USE_LIBRARY_1_1
#include <1-1.h>
#elif USE_LIBRARY_1_2
#include <1-2.h>
typedef bucket_t bucket
#endif
于 2013-06-24T21:08:17.620 回答