在我的代码库中,我发现两个模块具有同名的结构。它给出了一个名称冲突错误。有没有办法在不更改代码的情况下解决它?
最佳答案
这是一个可怕的黑客,但是可以使用宏重新定义结构的名称,就像这样
// 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
记住要取消宏的定义,这样在代码中就不会出现随机替换。