背景:
假设我有两个头文件啊和bh
啊包含:
#define VAR 1
Run Code Online (Sandbox Code Playgroud)
bh包含:
#define VAR 2
Run Code Online (Sandbox Code Playgroud)
注意:两个宏的名称相同.假设我有一些文件myFile.c,其中包括两个头文件ieah和bh
当我尝试访问VAR时,我得到VAR的重定义错误.
为了解决这个问题,我在ah和bh文件中插入了#ifndef VAR语句以防止出现此错误.啊文件变成了
#ifndef VAR
#define VAR 1
#endif
Run Code Online (Sandbox Code Playgroud)
bh文件变成了
#ifndef VAR
#define VAR 2
#endif
Run Code Online (Sandbox Code Playgroud)
注意:头文件可以包含多个宏,而不仅仅是一个宏.
问题:
我们假设啊和bh文件是从第三方库获得的.这些文件不包含#ifndef VAR语句.
我不允许更改其头文件.
我可以在使用VAR宏的myFile.c或myFile.cpp文件中解决宏'VAR'重定义错误吗?
我知道#undef VAR可用于取消定义宏VAR.我怎样才能在我的程序中选择性地包含VAR?即对myfile.c文件代码行10我应该能够指从文件啊VAR的定义,在我的代码的第15行,我应该能够从BH文件和第18行是指VAR再次我应该可以参考来自啊文件的VAR.
总之,我能做宏多态吗?给定头文件的名称,它应该引用该文件中存在的宏定义.
我想过使用命名空间技巧来解决问题.在名称空间中定义第一个头文件,在名称空间中定义第二个头文件.
我尝试定义两个名称空间.第一个命名空间包含#include啊,第二个命名空间包含bh但是,命名空间技巧不适用于宏.当我尝试访问firstns :: VAR时,编译器会报告错误消息.
你能建议一些方法吗?