遇到个问题. 我们的代码 和 第三方lib里都有定义类型u8
.
typedef UINT8_TYPE u8;
然后编译就有 redefinition of typedef
.
现有的解决方案
-
把
u8
重新define一下#include "A.h" // has u8 typedef #define u8 something_else #include "B.h" // has u8 typedef
-
在两个头文件里都改一下, 如在 A.h中:
+#ifndef U8_TYPE_DEFINED +typedef UINT8_TYPE u8; +#define U8_TYPE_DEFINED +#endif
我的问题是, 还有没有更好的解决方案.
你重新define的方法,在头文件被多个地方引用的时候,会一团乱,而且看起来也难看,不好维护,因为include有前后关系,再者,这样的redefine不一定能保证链接没有问题。
C语言对于类型名名字冲突,给出的建议就是在定义自定义类型时,带上自己项目相关的前缀,你看几乎所有著名的C语言开源项目,符号前都带有自己的前缀。而C++则用名字空间。
所以,我的建议就是把自己定义的类型加上前缀,现在IDE的重构功能工作得很好,重命名也简单。当然,如果用C++编译也能接受的话,给自己的代码加上名字空间也是可以的。