2013-03-19 35 views
23

「T」在字符串中表示什麼?例如_T(「你好」),我在項目中看到了這其中的Unicode支持needed.What它實際上告訴處理器_T在CString中代表什麼

回答

20

_T代表「text」。它會將您的文字轉換爲Unicode寬字符文字,當且僅當您使用Unicode支持編譯源文件時。見http://msdn.microsoft.com/en-us/library/c426s321.aspx

+4

從技術上講,'_T()'僅用於C運行時庫,用於'_TCHAR'數據類型。 Win32等價物是用於'TCHAR'數據類型的'TEXT()'宏。根據在編譯過程中是否定義了_UNICODE和UNICODE,它們都映射到'char'或'wchar_t'。兩者通常都是一起定義/未定義的,所以很多人傾向於互相交流,而事情通常都是有效的。但他們在邏輯上是分開的,並且應該相應地處理。在C函數中使用'_TCHAR'和'_T()'。在Win32 API中使用'TCHAR'和'TEXT()'。 – 2015-10-13 18:48:46

+0

@RemyLebeau:現在有個棘手的問題:使用MFC/ATL的'CString'類型的哪一個? 'CString'在CRT和Windows API方面都得到了實現。 – IInspectable 2017-03-02 17:25:24

+0

根據文檔:「*** CString基於'TCHAR'數據類型**。*」,所以使用'TEXT()'。 – 2017-03-03 08:06:37

10

從MSDN:

使用_T宏代碼一般文字串,因此它們可以編碼爲Unicode下的Unicode字符串或ANSI編碼的字符串(包括MBCS),而不使用Unicode

8

它實際上用於需要ANSI支持的Unicode 的項目。它告訴編譯器根據預編譯器定義的值將字符串文字編譯爲Unicode或ANSI。

爲什麼你想這樣做是另一回事。如果你想支持Unicode本身,那麼只需編寫Unicode,在這種情況下,L"Hello"。當需要支持Windows NT和更高版本(支持Unicode)和Windows 9x/ME(不支持)時,添加了_T()宏。現在使用這些宏的代碼已經過時,因爲所有現代Windows版本都是基於Unicode的。