【问题标题】:CamelCase to snake_case in preprocessor macro预处理器宏中的 CamelCase 到 snake_case
【发布时间】:2016-09-26 19:21:32
【问题描述】:

以下代码 sn-p(虽然在 Java 中)从 CamelCase 转换为 snake_case。 在 C/C++ 宏中(即在 #define 行中)我应该怎么做?

    String regex = "([a-z])([A-Z]+)";
    String replacement = "$1_$2";
    System.out.println("CamelCaseToSomethingElse".replaceAll(regex, replacement).toLowerCase());

【问题讨论】:

  • Java 代码中可以有宏!参考 - stackoverflow.com/questions/6525059/…
  • 标识符名称,包括函数和变量,在编译后会丢失(调试模式除外)。所以从 CamelCase 转换为 snake_case 是在浪费你的开发时间。

标签: c++ regex macros c-preprocessor


【解决方案1】:

在构建过程中进行这种转换。

编写一个转换程序,给定一个字符串输入文件,将生成一个 C/C++ 头文件,其中包含每个所需转换的定义。

所以,给定一个带有条目的输入文件:

TOKEN="Hello World"

创建一个输出包含以下内容的头文件的转换:

#define R_TOKEN="Hello World" // Regular text
#define U_TOKEN="HELLO_WORLD" // Upper case token transform
#define L_TOKEN="hello_world" // Lower case token transform
#define C_TOKEN="HelloWorld"  // Capital CamelCase token transform
#define K_TOKEN="helloWorld"  // Lowercase CamelCase token transform

等等……

将转换添加到您的构建规则中,生成的标头将成为您需要它的源文件的依赖项(google makedepends)。

(在make...中做起来很简单)

【讨论】:

    【解决方案2】:

    我应该如何在 C/C++ 宏中执行此操作(即在 #define 行)?

    你必须很好地学习 C++,在 C++ 社区中获得足够的分量,并成为 C++ 标准化委员会的成员。然后,您可以提出对 C++ 标准的合理增强,这将允许将其作为宏来实现。但是,不要希望这种情况发生在 c++2x 之前。因此,修改您的要求可能是解决您手头问题的更好方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 2015-04-15
      • 2020-11-08
      • 2015-07-31
      • 1970-01-01
      相关资源
      最近更新 更多