C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C typedef名称冲突大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经获得了两个包含两个同名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,那么由于类型安@L_696_25@,你会遇到更大的问题. OTOH,图书馆供应商都因不正确的名称空间控制而犯了罪.

大佬总结

以上是大佬教程为你收集整理的C typedef名称冲突全部内容,希望文章能够帮你解决C typedef名称冲突所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。