【发布时间】:2021-09-07 03:18:27
【问题描述】:
我正在尝试在 C 中使用这个宏定义:
#define STR(x) #x
是否可以在 x 中包含一些转义序列?例如,我想定义一个字符串,如:
char* str = "\'";
这个声明似乎不起作用:
char* str1 = STR(\');
如果我必须使用这个宏定义,有没有办法包含包含撇号"\'" 的字符串?谢谢!
【问题讨论】:
-
我不认为预处理器是这样工作的。请准确解释你为什么需要这个。此外,由于您已标记 C++,请注意字符串文字不能分配给非常量
char*。 -
在 C++ 中你可以使用raw string literals,
std::string escaped = R"(\')"; std::cout << escaped;->\' -
感谢您的回复,我有一个宏定义,例如:#define IMG(x) "/Image/" #x ".png" 来描述图像的路径和名称。但是某些图像的名称包含撇号“'”。有什么方法可以使用我的宏定义来表示这些图像名称?
-
您标记了两种不同的语言。既然您在问题中提到了 C,我假设 C++ 是无关标签。
-
您似乎正在尝试使用预处理器对任意文本执行“字符串化”,但宏参数不允许为任意文本。
标签: c c-preprocessor stringification