C++编译器或预处理器是否可以将符号转换为大写
Can the C++ compiler or preprocessor convert a symbol to uppercase?
我正在尝试对任意混合大小写单词集合使用 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 单行代码)。
相关文章:
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 获取隐式转换溢出从无符号到已签名的警告
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- C ++中无符号位长度类型之间的隐式转换,即uint8_t,uint16_t
- 错误:隐式转换更改符号:'int'到'unsigned long'
- 如何将 UTF-8 文本从文件转换为某个可以迭代的容器,并检查每个符号是否为C++字母数字?
- 将浮点数转换为无符号字符数组并打印出来
- 将无符号转换为复杂<int>原因符号转换警告
- 自动符号转换,用于对类等数学向量进行操作
- 矢量浮点到整数/符号转换
- C++编译器或预处理器是否可以将符号转换为大写
- 在 AND 和比较时进行符号转换
- 多字节到宽字符将 (°) 度数符号转换为
- Java中的反向无符号到有符号转换
- 我能把字符符号转换成字符串吗