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

C语言宏定义中字符串间的反斜杠\有什么作用?

C语言多行宏定义末尾反斜杠的作用

你代码中每行字符串末尾的\是C预处理器识别的行接续符(行拼接符),功能非常明确:

  • C语言中#define定义的宏,默认有效范围仅到当前行的换行符为止,一旦遇到换行就认为宏定义结束。如果需要书写多行内容的宏,必须在每一行(除了宏的最后一行)的末尾加上\,告诉预处理器“下一行和当前行是同一个逻辑行,不要截断宏定义”。
  • 注意\必须是当前行的最后一个字符,后面不能夹带空格、注释等任何内容,否则预处理器无法正确识别,会触发宏定义语法错误。

容易混淆的隐含语法点

你这段宏最终能生成完整的JSON字符串,核心不只是行接续符的作用,还依赖C语言的内置语法规则:所有用双引号包裹、相邻书写的字符串字面量,编译阶段会自动拼接成一整个完整字符串,中间不需要额外加连接运算符。
你的宏经过预处理器处理、消掉所有换行和行接续符之后,实际等价于下面这行逻辑代码:

#define REGISTRER_DEVICE "{" "\"Type\":1" "," "\"Uid\":\"92a5aa89c771de67\"" "," "\"Port\":6787" "," "\"TypeConn\":0" "}"

编译器会自动把这堆相邻的字符串拼接成完整的JSON串:{"Type":1,"Uid":"92a5aa89c771de67","Port":6787,"TypeConn":0}。

改写为char数组的方案

你要弃用宏定义、把JSON内容存到char数组里的话,完全不需要写行尾的\,直接利用字符串自动拼接的特性换行书写即可,可读性和原宏写法一致:

const char registrer_device[] = 
"{"
"\"Type\":1"
","
"\"Uid\":\"92a5aa89c771de67\""
","
"\"Port\":6787"
","
"\"TypeConn\":0"
"}";

如果字符串长度不长,也可以直接写成一整行,只是长文本下可读性较差:

const char registrer_device[] = "{\"Type\":1,\"Uid\":\"92a5aa89c771de67\",\"Port\":6787,\"TypeConn\":0}";

原宏里倒数第二行空行带的\属于冗余写法,改写为数组时直接删掉即可,不会影响内容正确性。

内容的提问来源于stack exchange,提问作者Rod Romo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:09:29