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

C++宏定义中的#运算符作用是什么?结合STR_ERROR宏实例说明

问题解答

#ecode是C/C++预处理阶段的字符串化运算符(Stringizing Operator),作用是将传入宏的参数原样转换为C风格字符串字面量。

以你给出的宏定义为例:

#define STR_ERROR(ecode) case ecode: return #ecode;

当你在代码中调用STR_ERROR(ENOENT)时,预处理器会将其直接展开为:

case ENOENT: return "ENOENT";

完全适配你返回const char*类型的错误码转可读字符串的场景,不需要手动为每个错误码编写对应的字符串常量,大幅减少重复代码。

补充说明

  • 字符串化运算符只会把宏参数的字面内容转为字符串,不会对参数本身做预计算或宏展开:比如你有宏定义#define ERR_NO_MEM 2,调用STR_ERROR(ERR_NO_MEM)会返回"ERR_NO_MEM"而不是"2"。如果需要先展开参数再转字符串,需要额外嵌套一层宏实现。
  • 转换过程中会自动过滤参数前后的多余空白,同时自动为参数内的引号、反斜杠添加转义符,保证生成的字符串字面量合法。
  • 之前搜索不到对应内容是因为搜索引擎会默认忽略#这类特殊符号,你可以用「C宏 字符串化运算符」作为关键词搜索,就能找到对应的官方语法说明。

内容的提问来源于stack exchange,提问作者AMADANON Inc.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:45:01