【问题标题】:Can the C++ compiler or preprocessor convert a symbol to uppercase?C++ 编译器或预处理器可以将符号转换为大写吗?
【发布时间】:2012-10-02 15:33:07
【问题描述】:

我正在尝试对混合大小写单词的任意集合使用 DRY 方法,以便文本 MixedCase 可以同时生成:

  • 编译时字符串"MixedCase"
  • 编译时变量const int MIXEDCASE_ID

我正在使用 gcc,可以接受 gcc 扩展。

C++ 是否可以将代码中的 test 转换为大写?例如,这样

  转换(abc)

会产生符号ABC如果没有,除了在代码中将每个样本输入两次之外,还有其他解决方案吗?

编辑: 考虑到输入格式没有限制。 Mixed"Mixed"'M', 'i', 'x', 'e', 'd'0x4d 0x69 0x78 0x65 0x64(恶心?)...

【问题讨论】:

  • 模板在编译时解决,就像宏一样,如果我正确理解你的问题,你可以使用模板来解决这个问题。
  • @axis 你可能有。我很高兴我描述了根本问题。
  • @LuchianGrigore 您是否考虑将此作为答案?这将是完整的,这个问题很有趣。
  • @LuchianGrigore:那你会考虑删除评论吗?我相信您留下它是为了提供帮助,(谢谢),但这可能会阻碍我得到的创造性、有用的答案。
  • 在编译时将 "MixedCase" 转换为 "MIXEDCASE" 不是问题,但将其用作符号是。

标签: c++ gcc c-preprocessor


【解决方案1】:

为此,您需要编写一个构建工具来预处理(实际上是预处理)您的源文件以进行此转换。 gcc 中没有内置功能可以在编译时执行此操作。

【讨论】:

  • +1 用于代码生成:使用sedawk 或您选择的脚本语言......好的,或m4。只需让您的构建系统为您调用它。
【解决方案2】:

看看m4 预处理器。它可以做到这一点以及更多。

【讨论】:

    【解决方案3】:

    使用 chaos pp 库(适用于 C89 和 C99 预处理器)您可以这样做:

    CHAOS_PP_CONCAT
    (
        (CHAOS_PP_STRING) CHAOS_PP_STRING_TO_UPPER(M i x e d C a s e)
    ) 
    // Expands to MIXEDCASE
    

    字符的有效值是数字(0 到 9)、基本源字符集中的字母字符(a 到 z 和 A 到 Z)和下划线 (_)。下面是使用其他字符的示例:

    CHAOS_PP_CONCAT
    (
        (CHAOS_PP_STRING) CHAOS_PP_STRING_TO_UPPER(a b C _ 1 0)
    )
    // Expands to ABC_10
    

    它还有用于字符串化标记的宏。

    【讨论】:

      【解决方案4】:

      您可以自己查看the manual。如果你在那里找不到任何你想要的东西,你总是可以创建你自己的预处理器(例如,这可能只是你的 Makefile 中的一个 Perl 单行)。

      【讨论】:

        猜你喜欢
        • 2012-09-09
        • 2023-03-03
        • 1970-01-01
        • 2011-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-15
        相关资源
        最近更新 更多