2008-11-03 54 views

回答

25

不,沒有。您必須使用L前綴(或VC++中的_T()這樣的宏,當編譯爲Unicode時,無論如何擴展到L)。

+6

這並不完全準確。 _T()宏只在你定義的UNICODE中擴展爲L。這實質上是將其作爲宏觀的一點。如果您希望字符串始終爲unicode,請直接使用L。 – shoosh 2008-11-03 22:37:03

1

爲什麼你不想在L字符串前加上前綴?這很簡單 - 沒有L的字符串是ANSI字符串(const char*),帶有L的字符串是寬字符字符串(const wchar_t*)。還有就是TEXT()宏,這使得一個字符串爲ANSI或依賴於當前項目的寬字符串被設置爲使用UNCODE:


#ifdef UNICODE 
#define TEXT(s) L ## s 
#else 
#define TEXT(s) s 
#endif 

另外還有_T()宏,這相當於TEXT()

+0

我們正在閱讀文件可能是unicode並輸出unicode xml,因此我們在內部進行的轉換映射將wstring與我們的字符串文字進行比較。 – Fry 2008-11-03 22:10:42

+0

@ Adam - 只是好奇 - 你知道_T和TEXT宏是否是語言標準的一部分,還是他們是MS VC++特定的? – 2008-11-04 02:12:10

+0

它在WinNT.h中(包含在windows.h中)。我不認爲它是特定於VC++的,而是特定於Windows的,因爲它可以在任何可以讓你構建WinAPI應用程序的設置中使用。 – KTC 2008-11-04 06:48:31

3

在一個相關的說明.. 我試圖做到以下幾點

#define get_switch(m) myclass::getSwitch(L##m) 

這是一個宏將擴大

get_switch(isrunning) 

myclass::getswitch(L"isrunning") 

能正常工作在C++中的VisualStudio 2008

,但是當我在Mac的Xcode(iPhone版)編譯相同的代碼我得到的錯誤:

error: 'L' was not defined in this scope. 

編輯:解

#define get_switch(m) myclass::getSwitch(L ## #m) 

這適用於vC++和mac xcode(gcc)

相關問題