c 语言重新定义坐标原点,在不修改.h文件的情况下处理宏重新定义... C/C++语言...

假设我有两个头文件a.h和b.h.

A.H包含:

#define VAR 1

b.h包含:

#define VAR 2

注:这两个宏的名称是一样的。 假设我有一些文件myFile.c,它包含了两个头文件,即a.h和b.h.

当我尝试访问VAR时,我得到VAR的重定义错误。

为了解决此问题,我在a.h和b.h文件中插入了#ifndef VAR语句以防止出现此错误。 A.H文件变得

#ifndef VAR

#define VAR 1

#endif

b.h文件成为

#ifndef VAR

#define VAR 2

#endif

注:头文件可以包含多个宏,而不仅仅是一个宏。

问题:

让我们假设A.H和b.h文件是从第三方库获得。这些文件不包含#ifndef VAR语句。

我不允许更改它们的头文件。

我可以在使用VAR宏的myFile.c或myFile.cpp文件中解析宏'VAR'重定义错误吗?

我知道我可以使用#undef VAR来取消定义宏VAR。我如何有选择地将VAR包含在我的程序中?即在myFile.c代码的第10行,我应该能够从ah文件引用VAR定义,在我的代码行15我应该能够引用VAR从bh文件,并在第18行再次我应该能够引用从VAR文件到VAR。

总之,我能做宏观多态吗? 给定头文件的名称,它应该引用该文件中存在的宏定义。

我想过使用命名空间技巧来解决问题。在命名空间第一个和第二个头文件中定义第一个头文件。

我试着定义了两个命名空间。第一个命名空间包含#include a.h,第二个命名空间包含b.h.但是,命名空间技巧不适用于宏。当我尝试访问firstns :: VAR时,编译器报告一条错误消息。

你能推荐一些方法吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值