2016-09-26 93 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做...)