遇到个问题. 我们的代码 和 第三方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++编译也能接受的话,给自己的代码加上名字空间也是可以的。