T()和L的区别

来源:互联网 发布:个人seo 编辑:程序博客网 时间:2024/04/27 07:12

Visual C++里边定义字符串的时候,用_T来保证兼容性,是一种数据类型,但是它不会产生结果,被编译系统的预处理系统来解释,VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。
        如果将来你不打算升级到unicode,那么也不需要_T!

_T是将字符串转换为TCHAR,TCHAR是一个宏定义,当定义了UNICODE时TCHAR等同于 WCHAR,否则等同于CHAR。为了和以后的平台兼容,建议使用TCHAR,而不要使用普通的CHAR。例子:TCHAR *s = _T("FSDF")。
      L将字符串转换为WCHAR,用于需要UNICODE的环境。例子:WCHAR *s = L"FSDF"。

Example:
      SetWindowText(_T("我很好"));
    在中文Win2000上正常,在英文Win2000下就是乱码!
// _T()自动将()内字符串转成unicode or Multibyte-character or SBCS (ASCII) 根据系统宏定义,
// 为了将程序与vb等unicode 编码的程序交互,为了程序的国际化,为了...
// 看msdn! 如果定义了 UNICODE 就变成 L把字符串转换成宽字符,否则没用。
// 统一的字符编码标准, 采用双字节对字符进行编码
// _T把参数转换成当前系统支持的字符,例如支持UNICODE就转换成宽字符,否则就是单字符
#ifdef UNICODE
#define _T(x) L##x
#else
#define _T(x) x
#endif
_T/_TEXT是在TCHAR.H头文件中定义的宏。
在_UNICODE和_MBCS都没有定义时,对其后的字符串无影响
在_MBCS定义时,对其后的字符串无影响
在_UNICODE定义时,其后的字符串被定义为 L(即转换为Unicode字符)
本质上是为了生成Unicode和非Unicode通用的程序而定义的宏。

原创粉丝点击