我有一个库1-1.h.
#include <1-1.h>;
Run Code Online (Sandbox Code Playgroud)
哪个有结构:
struct bucket { ... }
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个库是三方的,他们已经在1.2中将struct bucket更改为bucket_t {...}.我的所有代码都使用了bucket,但我也希望它与bucket_t兼容.
是否有可能:
#ifndef bucket
typedef bucket_t bucket;
#endif
Run Code Online (Sandbox Code Playgroud)
(代码不起作用,但如果存在,我想将bucket设置为bucket_t.谢谢.
一种选择是在项目或 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
Run Code Online (Sandbox Code Playgroud)
如果每个版本中的标头使用相同的文件名...
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
Run Code Online (Sandbox Code Playgroud)