gpt4 book ai didi

c++ - 在#define 宏中转义# 符号?

转载 作者:IT老高 更新时间:2023-10-28 12:31:33 25 4
gpt4 key购买 nike

在不涉及血淋淋的细节的情况下,我想使用一个 #define 宏,该宏将扩展为一个 #include 但“#”符号会混淆预处理器(如它认为我想引用一个论点。)

例如,我想做这样的事情:

#define MACRO(name) #include "name##foo"

然后这样使用它:

MACRO(Test)

这将扩展为:

#include "Testfoo"

不起眼的 # 符号导致预处理器出错。 MinGW 给我以下错误:

'#'后面没有宏参数

我想我需要转义 # 符号,但如果这可能的话我不会。

是的,宏确实是邪恶的……

最佳答案

可以将哈希 token 插入到预处理的 token 流中。你可以这样做:

#define MACRO(hash, name) hash include name
MACRO(#,"hello")

——扩展为:

# include "hello"

然而,该标准明确排除了对此类行的任何进一步分析,以确定是否存在预处理指令 [cpp.rescan]:

The resulting completely macro-replaced preprocessing token sequence is not processed as a preprocessing directive even if it resembles one.

关于c++ - 在#define 宏中转义# 符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1135822/

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