2016-09-26 94 views
-1

以下代码片段(尽管在Java中)会从CamelCase转换为snake_case。 在C/C++宏中应该怎么做(即在#define行中)?CamelCase to snake_case in preprocessor macro

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

它可以在Java代码中的宏!参考 - http://stackoverflow.com/questions/6525059/can-i-have-macros-in-java-source-files –

+0

编译后(除了调试模式)标识符名称,包括函数和变量,都会丢失。所以从CamelCase转换到snake_case是浪费你的开发时间。 –

回答

0

我应该怎么做要做到这一点在C/C++的宏(即在的#define 线)?

您必须非常好地学习C++,在C++社区中获得足够的权重并成为C++标准化委员会的成员。然后你可以提出一个对C++标准的声音增强,这将允许它作为一个宏来实现。但不希望这种情况发生在比C++ 2x更早的时候。因此,修改您的需求可能是解决您手头问题的更好方法。

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做...)