博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
也说_T、_TEXT、TEXT、L
阅读量:6939 次
发布时间:2019-06-27

本文共 1359 字,大约阅读时间需要 4 分钟。

本片文章转载自:http://www.cnblogs.com/sobe/archive/2011/03/14/1984188.html

 

 

百度或谷歌一下,有很多大牛早已经写过无数相关的文章说明这几个宏的作用

而我嘛,写这篇东东当是给自己一个提醒,因为之前直接使用了L这个标志,搞到后来要自己手动转编码

MSDN中对于L的说明有一大堆英文,不过主要的就是:L是用来标志一个字符(串)为宽字符(串)

宽字符和多字节字符的说明如下:(引用自网络)

宽字符,wide character,该字符集内每个字符使用相同的位长;

多字节字符,multibyte character,每个字符可以是一到多个字节不等,而某个字节序列的字符值由字符串或流(stream)所在的环境背景决定。

当你在VS2005以上版本的IDE工作时,可以选择工作于这两种不同的编码方式下,而在Unicode方式下,则要对字符(串)常量前添加L来告诉编译器它是宽字符

而MS为我们定义了好几个相关的宏,下面来一一说明:

_T            //定义于tchar.h

_TEXT      //同样定义于tchar.h,具体如下:

 

#define _T(x) __T(x)
#define _TEXT(x) __T(x)
#ifdef _UNICODE
#define __T(x) L ## x //第210行
#else
#define __T(x) x //第858行
#endif

 

TEXT     //定义于winnt.h

 

#define TEXT(quote) __TEXT(quote)
#ifdef UNICODE
#define __TEXT(quote) L##quote
#else /* UNICODE */
#define __TEXT(quote) quote
#endif /* UNICODE */

 

当我看到这里的时候,一下子头晕了,不知道大家有没有注意到下面两个问题:

1.这三个宏分别在两个不同的文件被定义,看上去一个是运行时的头文件,一个是Win的头文件

2.前面两个根据_UNICODE来确定宏内容,另一个则是根据UNICODE

那如果要同时使用这三个宏的话,那不是要同时定义_UNICODE和UNICODE?带着问题,我把项目的属性修改一下

当设置为Unicode编码的时候,编译器命令选项中的确同时加入了_UNICODE和UNICODE

看来这应该又是MS的历史遗留问题拉,搜索一下才发现:(引自网络)

 

Jeffrey Richter在《Windows核心编程》中说,_UNICODE宏用于C运行期头文件,而UNICODE宏则用于Windows头文件.当编译源代码模块时,通常必须同时定义这两个宏.

 

嘻嘻,无意发现的~~~~扯远拉~~~~

看IDE自动生成的代码,大都使用TEXT这个,应该是因为IDE生成的都是基于Win的代码,使用这个也很正常吧

从上面的分析可得:

这几个宏的效果都是一个的,还是建议大家有事没事都加上其中一个(_T、_TEXT、TEXT)

而L嘛,个人认为还是不要在代码中直接使用

好拉,就这么多,欢迎各位大牛来围观指正~~~

转载于:https://www.cnblogs.com/chaos4/p/4254353.html

你可能感兴趣的文章
startActivityForResult不返回结果
查看>>
消除“Permission is only granted to system apps”错误
查看>>
entity framework自动生成数据库外键“表名_外键”的解决方案
查看>>
JS魔法堂:彻底理解0.1 + 0.2 === 0.30000000000000004的背后
查看>>
ORA-12170: TNS:Connect timeout occurred
查看>>
二叉搜索树的插入与删除
查看>>
esd-ESD试题
查看>>
瘦客户端那些事 - 远程传输协议
查看>>
IT Configuration Management
查看>>
linux下git的安装和使用(转)
查看>>
浴血黑帮第三季/全集Peaky Blinders迅雷下载
查看>>
《深入浅出MFC》笔记(三)
查看>>
C语言程序中的内存结构数组
查看>>
Mac OS 使用 Vagrant 管理虚拟机(VirtualBox)
查看>>
javascript -window与document 待整理
查看>>
[大数据之Sqoop] —— Sqoop初探
查看>>
JavaScript 图片上传预览效果
查看>>
Elasticsearch聚合初探——metric篇
查看>>
VS 2005的一个BUG及对其原因猜测
查看>>
HTTP协议的头信息详解
查看>>