可能是重复的问题:
我能重新定义C ++宏然后再次定义吗?
假设我有一些使用变量名 BLAH
的代码。 假设 BLAH
是许多标准头文件中的常见预处理器定义(定义为10),因此如果我的文件在任何一个标准头文件之后被包含,代码会中断,因为 BLAH
被转换为10; 因此,我必须 #undef BLAH
。 但是其他标头也可能依赖于 BLAH
,因此在我的标题完成后,我必须将 BLAH
恢复到其原始值。 是否可以像这样做:
#ifdef BLAH
#define BLAH_OLD BLAH
#undef BLAH
#endif
... code ...
// restore BLAH to 10
#ifdef BLAH_OLD
#define BLAH BLAH_OLD
#end
?当然,这不起作用,因为BLAH没有扩展到10。我尝试做类似于以下的操作
#define EXPAND_AGAIN(x) x
#define EXPAND(x) EXPAND_AGAIN(x)
#define BLAH_OLD EXPAND(BLAH)
但这也不起作用,因为EXPAND字面上被采纳而没有被扩展。我正在使用MSVC 2008/2010,但如果解决方案能够在大多数其他编译器上工作,那将是可爱的。