VC 中TEXT、_T、L的區別
阿新 • • 發佈:2019-02-10
對於從VC++6.0轉到VS2005編譯環境中的程式設計師。往往會碰到字符集之間的轉換。
VC6.0採用的是ANSI字符集,而VS2005或者VS2008是採用的Unicode字符集。
L:
比如建立一個視窗類:
HWND hWnd=CreateWindow(L"ClassName",L"最簡單的Direct3D程式",
WS_OVERLAPPEDWINDOW,200,100,600,500,
NULL,NULL,wc.hInstance,NULL);
L的作用:是將ANSI字串轉換成Unicode字串,也就是每個字元佔用兩個位元組。
比如:
strlen("asd")=3;
strlen(L"asd")=6;
_T:
_T巨集可以把一個引號引起來的字串,根據你的環境設定,使得編譯器會根據編譯目標環境選擇合適的(Unicode還是ANSI)字元處理方式
如果你定義了UNICODE,那麼_T巨集會把字串前面加一個L。這時 _T("ABCD") 相當於L"ABCD",這是寬字串。
如果沒有定義,那麼_T巨集不會在字串前面加那個L,_T("ABCD") 就等價於"ABCD"
因此_T相當於自動轉換字符集。
TEXT:
功能與_T相似,在 ASCII 模式下,它們被忽略,也就是說被前處理器刪除掉,但是如果定義了UNICODE, 則它們會將常量字串轉換成等價的 UNICODE 。
TEXT 巨集的主要作用是當定義了 UNICODE/_UNICODE 預處理指令時,字串被標誌為雙位元組字串,否則字串被標示為 ANSI 字串。TEXT 的定義如下:
TEXT( LPTSTR string // ANSI 或者 Unicode 字串 );