小编use*_*119的帖子

处理宏重新定义而不修改.h文件... C/C++语言

背景:

假设我有两个头文件啊和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时,编译器会报告错误消息.

你能建议一些方法吗?

c c++

6
推荐指数
2
解决办法
8315
查看次数

标签 统计

c ×1

c++ ×1