_T、L、TCHAR、LPTSTR 的作用

VC++里面定义字符串的时候,用_T来保证兼容性。VC++支持ANSI和UNICODE两种字符类型(这两种字符集的转换可通过项目->属性->常规->字符集:使用UNICODE字符集和使用多字节字符集选项来改变。VC6以前的版本,需要手动更改:工程->设置->预处理程序定义。将_MBCS 改为_UNICODE),用_T可以保证源代码从ASCI i编码类型转换到UNICODE编码类型的时候,程序不需要修改。

例如:_T(“ABC”),在ANSI的环境下,它自动解释为ANSI编码,如果转换到UNICODE下,那么它将自动解释为双字节字符串,既UNICODE编码。这样做的好处,不管是ANSI环境,还是UNICODE环境,都适用。

那么在VC++中,字符串_T(“ABC”)和一个普通的字符串”ABC”有什么区别呢?

如果程序采用的是UNICODE编码,它将自动转换为 L”ABC”,每个字符为16位,宽字符串。

L的用法:

如 L”ABC” 表示将ANSI字符串转换成UNICODE的字符串,就是每个字符占用两个字节。

strlen("ABC") = 3;
strlen(L"ABC") = 6;

如果采用ASCI 编码,它就是ASCI 的”ABC”,每个字符为8位。

可以理解为以下代码:

#ifdef _UNICODE 
#define _T("ABC") L"ABC" 
#else 
#define _T("ABC") "ABC" 
#endif

_T宏可以把一个引号引起来的字符串,根据你的环境设置,使得编译器会根据编译目标环境选择合适的(UNICODE还是ANSI)字符处理方式。另外宏 TEXT_TEXT_T 一样的。

TCHAR 类型正如名称一样,它通过T和CHAR类型的组合来定义一个字符类型的变量,无论采用何种形式的编码规范。它都将自动处理转换。我们可以这样定义一个变量:TCHAR a[] = _T("ABC"); 当为UNICODE编码时相当于 WCHAR a[] = L"ABC",当为ANSI编码时解释为 char a[] = "ABC";

LPTSTR 相当于 *TCHAR,也是自动转换编码规范。

在程序设计中,应当尽量使用这样的红去定义变量,可以保证程序的兼容性和移植性!

赞(0) 打赏
取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

    暂无评论...