首页 > redefinition of typedef的处理

redefinition of typedef的处理

遇到个问题. 我们的代码 和 第三方lib里都有定义类型u8.

typedef UINT8_TYPE u8;

然后编译就有 redefinition of typedef.

现有的解决方案

  1. u8 重新define一下

    #include "A.h" // has u8 typedef
    #define u8 something_else
    #include "B.h" // has u8 typedef
    
  2. 在两个头文件里都改一下, 如在 A.h中:

    +#ifndef U8_TYPE_DEFINED
    +typedef UINT8_TYPE u8;
    +#define U8_TYPE_DEFINED
    +#endif
    

我的问题是, 还有没有更好的解决方案.


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

【热门文章】
【热门文章】