gpt4 book ai didi

c - 宏如何输出双引号

转载 作者:行者123 更新时间:2023-11-30 15:02:28 24 4
gpt4 key购买 nike

ATOMIC_JOIN(prefix, detail_platform)是一个宏,它将输出一些字符串,如下所示:

base/atomic/gcc_gnu_x64

在另一个宏中ATOMIC_DETAIL_HEADER ,其输出预计为:

"base/atomic/gcc_gnu_x64.hpp" // notice: double quotes included in the output

我尝试写ATOMIC_DETAIL_HEADER ,如:

#define ATOMIC_DETAIL_HEADER(prefix) "ATOMIC_JOIN(prefix, ATOMIC_DETAIL_PLATFORM).hpp"

#define ATOMIC_DETAIL_HEADER(prefix) \"ATOMIC_JOIN(prefix, ATOMIC_DETAIL_PLATFORM).hpp\"

#define ATOMIC_DETAIL_HEADER(prefix) "##ATOMIC_JOIN(prefix, ATOMIC_DETAIL_PLATFORM).hpp##"

...失败!

但如果我希望输出是:

<base/atomic/gcc_gnu_x64.hpp>

下面的宏定义可以做正确的事情:

#define ATOMIC_DETAIL_HEADER(prefix) <ATOMIC_JOIN(prefix, ATOMIC_DETAIL_PLATFORM).hpp>

最佳答案

cpp 宏无法以这种方式构建字符串。它可以连接 token 形成新的 token ,但在每个阶段它都必须是有效的 token 。您使用尖括号的示例有效,因为括号字符是不同的标记,而双引号不能像这样 float 存在,并且您不能对其应用 ##

在大多数情况下,编译器会连接相邻的字符串文字,因此#stringify每个部分都足以让编译器执行此操作。

关于c - 宏如何输出双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41052502/

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