1. 程式人生 > >[轉]vc中_T、L巨集的用法

[轉]vc中_T、L巨集的用法

GetDlgItem(IDC_NUMBER1)->SetWindowText(_T("數值1:"));不使用_T時,程式出現亂碼,因為ANSI是2位元組的,會出現半個漢字。而_T時程式執行正常。

1、 在字串前加一個L作用:

   如 L"我的字串"   表示將ANSI字串轉換成unicode的字串,就是每個字元佔用兩個位元組。

strlen("asd") =   3;

strlen(L"asd") =   6;

 2、 _T巨集可以把一個引號引起來的字串,根據你的環境設定,使得編譯器會根據編譯目標環境選擇合適的(Unicode還是ANSI)字元處理方式

   如果你定義了UNICODE,那麼_T巨集會把字串前面加一個L。這時 _T("ABCD") 相當於 L"ABCD" ,這是寬字串。

   如果沒有定義,那麼_T巨集不會在字串前面加那個L,_T("ABCD") 就等價於 "ABCD"

3、TEXT,_TEXT 和_T 一樣的

如下面三語句:

TCHAR szStr1[] = TEXT("str1");

char szStr2[] = "str2";

WCHAR szStr3[] = L("str3");

那麼第一句話在定義了UNICODE時會解釋為第三句話,沒有定義時就等於第二句話。  

但二句話無論是否定義了UNICODE都是生成一個ANSI字串,而第三句話總是生成UNICODE字串。

為了程式的可移植性,建議都用第一種表示方法。

但在某些情況下,某個字元必須為ANSI或UNICODE,那就用後兩種方法。

大家可以參考一下。