gpt4 book ai didi

c-preprocessor - CPP如何转义引号

转载 作者:行者123 更新时间:2023-12-04 10:33:10 27 4
gpt4 key购买 nike

我正在使 1991 年的代码在 Ubuntu 19 上运行。

我有这个文件,我需要通过 CPP 运行,我被迫使用 -traditional 选项。

#define ITEM_WEAPON 5
#define ITEM_FIREWEAPON 6
Trade types = "+ITEM_WEAPON+ITEM_FIREWEAPON+"

我希望这条线变成

Trade types = "+5+6+"

这在 1991-1997 年工作得很好 ;-) 出于显而易见的原因,似乎 cpp 不再在引号之间进行解析。

我尝试使用反斜杠字符转义引号,例如

Trade types = \""+ITEM_WEAPON+ITEM_FIREWEAPON+\""

但是还是没有找到很好的解决办法。

为清楚起见,这不是 C 程序,我们只是使用 cpp 将各种宏扩展为结构化文本文件,该文件随后通过解析器运行。

我最接近(带有 -traditional 标志)的东西是这样的:

#define WI 1
#define WJ 2

#define T(a,b) Trade types = "+a+b+"
T(1,2)
T(WI,WJ)

哪些输出:

Trade types = "+1+2+"
Trade types = "+WI+WJ+"

因此预处理器会替换引号之间的参数,但不会扩展参数化宏。

最佳答案

#include <iostream>
#include <string>

#define ITEM_WEAPON 5
#define ITEM_FIREWEAPON 6

#define STRINGIFY_HELPER(x) #x
#define STRINGIFY(x) STRINGIFY_HELPER(x)


int main()
{
std::string types = "+" STRINGIFY(ITEM_WEAPON) "+" STRINGIFY(ITEM_FIREWEAPON) "+";
std::cout << types << '\n';
return 0;
}

https://wandbox.org/permlink/R5sLKvGhcnL9Jgyj

关于c-preprocessor - CPP如何转义引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60320643/

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