如何在C应用程序中处理冲突的结构定义

时间:2015-01-09 03:07:15

标签: c struct namespaces

我有一个应用程序从专有二进制格式的文件中读取数据。该公司提供的头文件包含使文件直接解析的结构。到目前为止一切都很好。

供应商刚刚发布了一种全新的格式,并提供了一组新的头文件。不幸的是(或者幸运的是取决于你的观点),这些标题包含具有相同名称但定义完全不同的结构。

所以这就是我的问题 - 我有两个头文件定义了具有不同定义的相同结构,我的应用程序需要同时支持文件格式的旧版本和新版本。头文件长达几千行,因此调整并不可行。

在C中完成这项工作的最佳方法是什么?在C ++中,我可以将每个结构包装在命名空间中,但我不确定如何使用C ...来解决这个问题。

提前致谢!

1 个答案:

答案 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;
}