_T() 和_L() _TEXT __T,L区别与联系详解
_T("")是一个宏,他的作用是让你的程序支持Unicode编码
因为Windows使用两种字符集ANSI和UNICODE,
前者就是通常使用的单字节方式,
但这种方式处理象中文这样的双字节字符不方便,
容易出现半个汉字的情况。
而后者是双字节方式,方便处理双字节字符。
Windows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。
如果你编译一个程序为ANSI方式,
_T实际不起任何作用。
而如果编译一个程序为UNICODE方式,则编译器会把"Hello"字符串以UNICODE方式保存。_T和_L的区别在于,_L不管你是以什么方式编译,一律以UNICODE方式保存。
如果是UNICODE
#define __TEXT(quote) L##quote
#define __T(x) L##x
否则
#define __TEXT(quote) quote
#define __T(x) x
在TCHAR.h
#define _T(x) __T(x)
#define _TEXT(x) __T(x)
L"Hello!" ----- 引号前面的大写字母L(代表「long」)。这将告诉编译器该字串按宽字符保存——即每个字符占用2个字节。则字串变量需要14个字节-每个字符需要2个字节,末尾的0还需要2个字节。