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