开发者社区 问答 正文

redefinition of typedef的处理

遇到个问题. 我们的代码 和 第三方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

展开
收起
a123456678 2016-06-08 20:31:58 3707 分享 版权
1 条回答
写回答
取消 提交回答
  • 你重新define的方法,在头文件被多个地方引用的时候,会一团乱,而且看起来也难看,不好维护,因为include有前后关系,再者,这样的redefine不一定能保证链接没有问题。
    C语言对于类型名名字冲突,给出的建议就是在定义自定义类型时,带上自己项目相关的前缀,你看几乎所有著名的C语言开源项目,符号前都带有自己的前缀。而C++则用名字空间。
    所以,我的建议就是把自己定义的类型加上前缀,现在IDE的重构功能工作得很好,重命名也简单。当然,如果用C++编译也能接受的话,给自己的代码加上名字空间也是可以的。

    2019-07-17 19:32:43
    赞同 展开评论
问答地址: