在我的代码库中,我发现两个模块具有同名的结构。它给出了一个名称冲突错误。有没有办法在不更改代码的情况下解决它?

最佳答案

这是一个可怕的黑客,但是可以使用宏重新定义结构的名称,就像这样

// a.h
struct collide {
    int a;
};

// b.h
struct collide {
    float b;
};

// test.c
#define collide a_collide
#include "a.h"
#undef collide
#include "b.h"
int main(){
    struct a_collide a;
    struct collide b;
    return 0;
}

当有人不可避免地使用错误的结构时,您可能希望重命名这两个头的结构以给出错误,可能是在类似于
// wrap_a.h
#define collide a_collide
#include "a.h"
#undef collide

记住要取消宏的定义,这样在代码中就不会出现随机替换。

08-16 20:46