簡體   English   中英

如何定義宏以將連接的char字符串轉換為C中的wchar_t字符串

[英]how to define macro to convert concatenated char string to wchar_t string in C

與Visual Studio中的_T()宏一樣,我定義並使用自己的_L宏作為:

#define _L(x)  __L(x)
#define __L(x) L ## x

它適用於:

wprintf(_L("abc\n"));

但得到一個編譯錯誤:

wprintf(_L("abc\n""def\n"));

它報告“不能連接不同字符種類的字符串文字”。
我也做了:

#define _L2(x)  __L2(x)
#define __L2(x) L ## #x
wprintf(_L2("abc\n""def\n"));

代碼被編譯,但\\n不能作為新行的轉義序列。 \\n變為兩個字符, wprintf為:

“ABC \\ n” “高清\\ n”

我怎么能有一個宏將兩個連接的char字符串轉換為wchar_t 問題是我有一些已經存在的宏:

#define BAR  "The fist line\n" \
             "The second line\n"

我想在編譯期間將它們轉換為wchar字符串。 編譯器是Windows中的ICC。

編輯
_L宏在gcc中工作,MSVC和ICC不起作用,這是編譯器錯誤。 謝謝@R ..對我發表評論。

我認為你不能做到這一點。

宏只是做簡單的文本處理。 他們可以在開頭添加L ,但不能說"abc\\n" "def\\n"是兩個字符串,需要兩次加L

如果將字符串傳遞給以逗號分隔的宏,而不是連接,則可以取得進展:
L("abc\\n", "def\\n")

定義L恰好接受兩個字符串是微不足道的:
#define L2(a,b) _L(a) _L(b)
將其推廣為具有單個宏以獲得任意數量的參數並在正確的位置添加L s是可能的,但更復雜。 你可以在Jens Gustedt的P99宏中找到聰明的宏來做這些事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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