【问题标题】:How to contain escape sequences in macro definition #?如何在宏定义#中包含转义序列?
【发布时间】: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


【解决方案1】:
const char* img = "/Image/'.png";

也可以写成

const char* img = "/Image/" "'" ".png";

所以你可以使用

#define IMG(x) "/Image/" x ".png"

const char* img = IMG("'");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    相关资源
    最近更新 更多