3

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

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

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

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

  转换(abc)

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

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

4

4 回答 4

4

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

于 2012-10-02T15:49:30.813 回答
1

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

于 2012-10-02T16:06:43.010 回答
1

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

它还具有用于对标记进行字符串化的宏。

于 2012-10-05T01:31:28.660 回答
0

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

于 2012-10-02T15:50:44.200 回答