C++编译器或预处理器是否可以将符号转换为大写

Can the C++ compiler or preprocessor convert a symbol to uppercase?

本文关键字:符号 转换 编译器 预处理 处理器 是否 C++      更新时间:2023-10-16

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

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

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

C++是否可以将代码中的测试转换为大写? 例如,使得

转换(ABC)

会产生符号ABC如果没有,除了在代码中键入每个示例两次之外,是否有其他解决方案?

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

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

使用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

它还具有用于字符串化令牌的宏。

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

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