假设我有两个头文件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时,编译器报告一条错误消息。
你能推荐一些方法吗?