1. 程式人生 > >VC 中TEXT、_T、L的區別

VC 中TEXT、_T、L的區別

對於從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 字串
      );