You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言宏定义中如何在#字符串化操作的参数内包含转义序列

C语言STR宏构造含转义单引号字符串的解决方案

报错原因

你编写的char* str1 = STR(\');无法正常工作,核心原因是C预处理器的词法分析规则:
预处理器处理宏参数时会先做词法拆分,你写的\'会被识别为不完整的字符常量(缺少结束的配对单引号),还没到执行#x字符串化的步骤就会直接触发语法错误。

可行方案(无需修改原有STR宏定义)

方案1:使用ASCII转义序列(最便捷)

单引号的ASCII码十进制为39,对应八进制转义\047、十六进制转义\x27,直接传入宏即可:

#define STR(x) #x
char* str1 = STR(\047);

预处理后会生成等价于"\'"的字符串"\047",运行时得到的内容完全相同,仅源代码字面量写法有区别。

方案2:嵌套宏展开生成显式\'字面量

如果你需要最终生成的字符串字面量中直接包含\'写法,可以加一层中转宏绕开预处理器的词法检查:

#define STR(x) #x
// 中转宏用于先展开单引号,再传给STR做字符串化
#define EXPAND_STR(x) STR(x)
#define SINGLE_QUOTE '

char* str1 = EXPAND_STR(\SINGLE_QUOTE);

预处理器会先把SINGLE_QUOTE展开为单引号,再执行字符串化操作,最终生成的代码就是char* str1 = "\'";,完全符合需求。

内容的提问来源于stack exchange,提问作者FUKUAN WANG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:27:01