可能重复:
Can I redefine a C++ macro then define it back?保留预处理器定义
说我有一个使用该名称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,但如果该解决方案也适用于大多数其他编译器,那将是可爱的。
您是否考虑过更改变量命名? – 2010-11-08 21:18:31
更改变量的名称;如果这是一个问题,那么你在那里会遇到可怕的惯例。而如何而不是“让我们说”你说“这是我试图解决的实际问题。” – GManNickG 2010-11-08 21:34:50
你确实认识到,从几乎一开始,这是一个约定,全部大写的标识符都被保留给预处理器使用(为了避免这样的事情)。 – 2010-11-08 21:49:36