我有一个应用程序从专有二进制格式的文件中读取数据。该公司提供的头文件包含使文件直接解析的结构。到目前为止一切都很好。
供应商刚刚发布了一种全新的格式,并提供了一组新的头文件。不幸的是(或者幸运的是取决于你的观点),这些标题包含具有相同名称但定义完全不同的结构。
所以这就是我的问题 - 我有两个头文件定义了具有不同定义的相同结构,我的应用程序需要同时支持文件格式的旧版本和新版本。头文件长达几千行,因此调整并不可行。
在C中完成这项工作的最佳方法是什么?在C ++中,我可以将每个结构包装在命名空间中,但我不确定如何使用C ...来解决这个问题。
提前致谢!
答案 0 :(得分:3)
使用宏重命名一个头文件中的结构:
%cat header1.h
#ifndef HEADER1_H
#define HEADER1_H
struct mystruct {
int content;
};
#endif /* HEADER1_H */
%cat header2.h
#ifndef HEADER2_H
#define HEADER2_H
struct mystruct {
char *somestring;
};
#endif /* HEADER2_H */
%cat test.c
#include <stdio.h>
#include "header1.h"
#define mystruct mystruct_hdr2
#include "header2.h"
#undef mystruct
int main(void) {
struct mystruct one;
struct mystruct_hdr2 two;
one.content = 1;
two.somestring = "test";
printf("%d, %s\n", one.content, two.somestring);
return 0;
}