L:表示一個字符(串)是寬字符(串)
如:
CString myStr(L"test string");
_T、_TEXT、TEXT 三者效果相同
寬字符(wide character):每個字符使用相同的位長
多字節字符(multibyte character):每個字符爲一到多個字節,而某個字節序列的字符值由字符串或流(stream)所在的環境背景決定。
VS2010 環境,可以選擇工作於這兩種不同的編碼方式下,
Unicode方式下,則要對字符(串)常量前添加L來告訴編譯器它是寬字符。
_T //定義於tchar.h
_TEXT //同樣定義於tchar.h
#define _T(x) __T(x)
#define _TEXT(x) __T(x)
#ifdef _UNICODE
#define __T(x) L ## x //第210行
#else
#define __T(x) x //第858行
#endif
#define TEXT(quote) __TEXT(quote)
#ifdef UNICODE
#define __TEXT(quote) L##quote
#else /* UNICODE */
#define __TEXT(quote) quote
#endif /* UNICODE */
tchar.h是運行時的頭文件,_T、_TEXT 根據_UNICODE來確定宏
winnt.h是Win的頭文件根據,TEXT 根據UNICODE 來確定宏
如果需要同時使用這3個宏,則需同時定義 UNICODE 和 _UNICODE
VS2010
,設置:項目--屬性--配置屬性--常規--字符集--使用Unicode字符集,
那麼編譯器命令選項中的確同時加入了_UNICODE和UNICODE。
注:項目--屬性--配置屬性--C/C++--命令行
_UNICODE宏用於C運行期頭文件,
UNICODE宏則用於Windows頭文件.
當編譯源代碼模塊時,通常必須同時定義這兩個宏。
參考:http://www.cnblogs.com/sobe/archive/2011/03/14/1984188.html