gpt4 book ai didi

c++ - 保留预处理器定义

转载 作者:IT老高 更新时间:2023-10-28 22:18:53 28 4
gpt4 key购买 nike

Possible Duplicate:
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,但如果该解决方案也适用于大多数其他编译器,那就太好了。

最佳答案

是的,因为您的编译器支持 push/pop 宏指令(visual c++、gcc、llvm 都可以):

#define BLAH 10

#pragma push_macro("BLAH")
#undef BLAH

#define BLAH 5

...

#pragma pop_macro("BLAH")

关于c++ - 保留预处理器定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4128126/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com