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

如何在编译时将字符宏拼接至字符串字面量?

编译时解决字符宏与字符串拼接的方案

可以通过分层宏定义实现编译时的转换,无需运行时处理,具体实现步骤如下:

  • 定义基础无引号宏
    先把选项字符定义为不带引号的标识符,作为后续转换的基础:

    #define OPT_SORT_NONE_BASE S
    
  • 编写转换辅助宏
    分别实现两个辅助宏,一个将基础宏转为字符常量,另一个转为无引号的字符串(两层宏展开是为了确保基础宏先被解析,再完成字符串化):

    // 转为字符常量
    #define TO_CHAR(c) 'c'
    // 转为无引号字符串
    #define STRINGIFY(s) #s
    #define TO_STRING(s) STRINGIFY(s)
    
  • 实际场景使用

    • 在case语句中使用字符形式:
      switch (opt) {
          case TO_CHAR(OPT_SORT_NONE_BASE):
              // 对应处理逻辑
              break;
          // 其他case分支
      }
      
    • 在argp选项文档中直接拼接字符串:
      (struct argp_option) {
          "reversed", "R", 0, 0,
          "Sort in descending order. This option has no effect if -" TO_STRING(OPT_SORT_NONE_BASE) " is enabled."
      }
      

预处理后,字符串部分会被展开为"-S is enabled.",完全符合需求,所有转换操作都在编译阶段完成,不会带来运行时开销。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:52:03