_T("")是一个宏,定义于tchar.h下。
#define __T(x) L ## x
#define _T(x) __T(x)

作用

他的作用是让你的程序支持Unicode编码,
因为Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双字节字符
Windows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。如果你编译一个程序为ANSI方式,_T实际不起任何作用。而如果编译一个程序为UNICODE方式,则编译器会把"Hello"字符串以UNICODE方式保存。_T和_L的区别在于,_L不管你是以什么方式编译,一律以UNICODE方式保存。
LPSTR:32bit指针指向一个字符串,每个字符占1字节
LPCSTR:32-bit指针指向一个常字符串,每个字符占1字节
LPCTSTR:32-bit指针指向一个常字符串,每字符可能占1字节或2字节,取决于Unicode是否定义
LPTSTR:32-bit指针字符可能占1字节或2字节,取决于Unicode是否定义
L是表示字符串资源为Unicode的。
比如
wchar_tStr[] = L"Hello World!";这个就是双字节存储字符了。_T是一个适配的宏~当#ifdef _UNICODE的时候_T就是L没有#ifdef _UNICODE的时候_T就是ANSI的。比如
LPTSTR lpStr = new TCHAR[];
TCHAR* szBuf = _T("Hello");
以上两句使得无论是在UNICODE编译条件下还是在ANSI编译条件下都是正确编译的。
而且MS推荐你使用相匹配的字符串函数。比如处理LPTSTR或者LPCTSTR的时候,不要用strlen ,而是要用_tcslen否则在UNICODE的编译条件下,strlen不能处理wchar_t*的字符串。T是非常有意思的一个符号(TCHAR、LPCTSTR、LPTSTR、_T()、_TEXT()...),它表示使用一种中间类型,既不明确表示使用 MBCS,也不明确表示使用 UNICODE。那到底使用哪种字符集?编译的时候才决定。

最新文章

  1. 源代码管理工具之SVN
  2. VIM下的跳转练习
  3. Android多线程机制和Handler的使用
  4. Arduino101学习笔记(八)—— 函数库
  5. 关于 getWriter() has already been called for this response 的错误解决办法
  6. 怎么样能让自己的虚拟机上网win7 for linux
  7. Java中transient有何作用?
  8. MySQL(5):数据表操作
  9. 包管理器Bower使用手册之一
  10. Python——装饰器
  11. [Oracle][DATAGUARD] 关于确认PHYSICAL STANDBY的同期状况的方法
  12. unsigned char idata temp[8];
  13. jquery学习总结24-36
  14. item 12: 把重写函数声明为“override”的
  15. 清除ul li里面的浮动并让ul自适应高度的一个好办法
  16. Android-json解析:原生JSONObject+JSONArray的使用【转】
  17. 总是套路留人心, JAVA提供的套路: LinkedHashMap实现LRU缓存; InvocationHandler实现动态代理; fork/join实现窃取算法
  18. PHP科学计数法转换成数字
  19. html与css架构的一点体验
  20. 访问GitLab的PostgreSQL数据库-(3)

热门文章

  1. 洛谷 - P4861 - 按钮 - 扩展大步小步算法
  2. (转载) 车牌识别EasyPR--开发详解
  3. 51nod 1416【DFS】
  4. Codeforces643A【一种暴力】
  5. [模板]manacher
  6. CentOS 部署RabbitMQ集群
  7. Hibernate-Session使用的背后
  8. 103 Binary Tree Zigzag Level Order Traversal 二叉树的锯齿形层次遍历
  9. shell与aw的简单交互示例
  10. object-position和object-fit