加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C typedef名称冲突

发布时间:2020-12-16 03:33:02 所属栏目:百科 来源:网络整理
导读:我已经获得了两个包含两个同名typedef的头文件. 我们来说aaa.h和bbb.h.它们来自2个不相关的第三方软件包,我无法控制这两个文件,但必须使用它们.我没有直接包含这两个文件,但它们相当包含在顶级头文件中. (即我包括分别包含它们的a.h和b.h) 由于名称冲突,我的
我已经获得了两个包含两个同名typedef的头文件.

我们来说aaa.h和bbb.h.它们来自2个不相关的第三方软件包,我无法控制这两个文件,但必须使用它们.我没有直接包含这两个文件,但它们相当包含在顶级头文件中. (即我包括分别包含它们的a.h和b.h)

由于名称冲突,我的程序不会被编译.

所以我的临时解决方案是将aaa.h复制到我的源代码树中,只删除了typedef,名为myaaa.h.在文件的顶部,我保留了“#ifndef AAA_H,#define AAA_H”包装器,所以当我包含myaaa.h时,由于AAA_H标志已经定义,因此不会包含aaa.h,间接删除了typedef冲突.

有没有一种更聪明的方法来做这个而不添加这样的文件(我必须对它进行版本控制)到我的源代码?

谢谢!

解决方法

#define conflicting_typedef aaa_conflicting_typedef
#include "aaa.h"
#undef  conflicting_typedef
#define conflicting_typedef bbb_conflicting_typedef
#include "bbb.h"
#undef  conflicting_typedef
#define conflicting_typedef ambiguous use aaa_conflicting_typedef or bbb_conflicting_typedef

如果需要从aaa.h引用typedef,可以使用名称aaa_conflicting_typedef;要从bbb.h引用typedef,请使用名称bbb_conflicting_typedef.如果(可能就是这种情况)你不需要在代码中引用任何一个typedef,那么你就可以了.最终的#define确保您不使用普通名称;您必须使用正确的映射名称.

显然,这不应该重复;如果有多个文件需要这个节,你可以把它放到你自己的标题“aaa_bbb.h”中,并包含你需要这个节的地方.您甚至可以检测是否已经包含了aaa.h或bbb.h,如果有,则拒绝编译(在此之后您无法检测到它们是否包含在内,但事实上它们已被包含在您的下面)控制意味着它们不应再被包括在内).

如果这是C,那么由于类型安全连接,你会遇到更大的问题. OTOH,图书馆供应商都因不正确的名称空间控制而犯了罪.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读