C语言 预处理标记可以被屏蔽而不被扩展吗?

8yparm6h  于 2023-01-08  发布在  其他
关注(0)|答案(1)|浏览(103)

假设我们定义了一个宏:

#define FOO 42

是否可以定义宏

#define SHIELD(x) // <- your code here

使得

SHIELD(FOO)

扩展到FOO而不是42

oo7oh9g9

oo7oh9g91#

这并没有直接解决您的问题,但是假设您希望在定义FOO之后能够以某种其他方式使用它,然后恢复原始定义,我能想到的唯一技巧是利用push_macro pragma,MSVC和GCC可能都支持它,但我建议验证它。

#define FOO 42
#pragma push_macro("FOO")
#undef FOO

// some stuff involving FOO

#pragma pop_macro("FOO")

我不知道这是否有助于你手头的特定情况,但值得知道这样的可能性存在..

相关问题