簡體   English   中英

C ++編譯器或預處理器可以將符號轉換為大寫嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM