L、TEXT、_TEXT、_T 用法說明

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




TEXT     //定義於winnt.h

#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字符集,
那麼編譯器命令選項中的確同時加入了_UNICODEUNICODE
注:項目--屬性--配置屬性--C/C++--命令行



_UNICODE宏用於C運行期頭文件,

UNICODE宏則用於Windows頭文件.

當編譯源代碼模塊時,通常必須同時定義這兩個宏。



參考:http://www.cnblogs.com/sobe/archive/2011/03/14/1984188.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章