gpt4 book ai didi

c++ - 在 arm-linux-androideabi-gcc 上使用 c/c++ 宏对 char '#' 进行字符串化

转载 作者:行者123 更新时间:2023-11-28 05:54:31 24 4
gpt4 key购买 nike

我有一个这样的宏。

#define TO_STR(x) #x

我可以使用这个宏来生成字符串,而无需在 char " 之间输入字符串。喜欢:

const char* test = TO_STR(hello,macro);
std::cout << test << std::endl;

我可以得到: 你好,宏正确。

我的问题是:如何处理输入字符串中的字符#。喜欢:

const char* shaderprogram = TO_STR(#version 300 es \n);

这会导致错误,有什么建议吗?

最佳答案

第一个格式错误,因为预处理器会将 , 视为分隔两个参数,而不是参数的一部分。

您可以尝试创建第二个宏

#define TO_STR2(a,b) TO_STR(a) "," TO_STR(b)

如果你想用三个参数做同样的事情,你需要定义另一个宏

#define TO_STR3(a,b,c) TO_STR2(a,b) "," TO_STR(c)

这对于更多的参数是可能的,但是很困惑——毕竟,宏并不是真的打算用于这种事情。

第二个的解决方案很简单

const char* shaderprogram = "#" TO_STR(version 300 es \n);

然而,真正的解决方案是摆脱对宏的迷恋,该宏允许您将 " 字符从字符串文字中移除。仅在宏中使用字符串化运算符,当它是问题的唯一解决方案,而不是在有其他选择时作为首选工具。

毕竟这

const char* shaderprogram = "#" TO_STR(version 300 es \n);   // blech!

不如

const char* shaderprogram = "#version 300 es \n"; 

通过多种措施——包括可读性、可维护性等

关于c++ - 在 arm-linux-androideabi-gcc 上使用 c/c++ 宏对 char '#' 进行字符串化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34487455/

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