[英]Can the C++ compiler or preprocessor convert a symbol to uppercase?
我試圖在混合大小寫單詞的任意集合上使用DRY方法,使得MixedCase
文本可以生成兩者:
"MixedCase"
const int MIXEDCASE_ID
我正在使用gcc,gcc擴展名是可以接受的。
C ++是否有可能將代碼中的測試轉換為大寫? 例如,這樣
CONVERT(ABC)
會產生符號ABC
嗎? 如果沒有,除了在代碼中輸入兩次每個樣本之外,還有其他解決方案嗎?
編輯:考慮輸入格式沒有限制。 Mixed
或"Mixed"
或'M', 'i', 'x', 'e', 'd'
或0x4d 0x69 0x78 0x65 0x64
(好嗎?)...
為此,您需要編寫一個構建工具,對您的源文件進行預處理(實際預處理)以進行此轉換。 gcc中沒有可以在編譯時執行此操作的內置功能。
看看m4
預處理器。 它可以做到這一點以及更多。
好吧使用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
它還具有用於對標記進行字符串化的宏。
您可以自己查看手冊 。 如果你找不到任何你想要的東西,你總是可以創建自己的預處理器(例如,它可能只相當於你的Makefile中的Perl單行程序)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.