本片文章转载自: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

也说_T、_TEXT、TEXT、L相关推荐

  1. 关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT

    char :单字节变量类型,最多表示256个字符, wchar_t :宽字节变量类型,用于表示Unicode字符, 它实际定义在<string.h>里:typedef unsigned s ...

  2. TEXT和_T,_TEXT

    VC中_T._TEXT和TEXT宏的作用(来自互联网) 收藏 1.在字符串前加一个L作用. 如:L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用 ...

  3. 编码(ACSII unicod UTF-8)、QT输出中文乱码深入分析

    总结: 1. qt输出中文乱码原因分析 qt的编程环境默认是utf-8编码格式(关于编码见下文知识要点一): cout << "中文" << endl; 程 ...

  4. VS编程中_T与L的区别

    一.L 在字符串前加一个L,如 L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节. strlen("asd") = ...

  5. unity 中让Text的文字动态刷新形式

    第一种刷新文字形式 using UnityEngine; using System.Collections; using UnityEngine.UI;public class SensorTextR ...

  6. postgresql、mysql数据库varchar、char、text的比较

    MYSQL: 1.char长度固定, 即每条数据占用等长字节空间: 2. varchar可变长度,可以设置最大长度,而varchar只会占用实际字符应该占用的空间+1,并且实际空间+1<=n. ...

  7. 非二进制字符串数据:CHAR,VARCHAR,TEXT

    CHAR数据类型是一个固定长度的类型,指定可以接收的最大的长度可以接收的,应该是0 to 255 CHAR数据类型在列值定义达到指定长度.CHAR(30)需要30个字符每个值,即使空值.没贴空值.末尾 ...

  8. C/C++线程与多线程工作笔记0006---VC++中_T()的作用

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 _T("")是一个宏,定义于tchar.h文件中.作用是将字符串转换为Unic ...

  9. Paper Reading《Taming Pretrained Transformers for Extreme Multi-label Text Classification 》

    @time:2020-11-30 github code arxiv paper SIGKDD 2020 Applied Data Track 1. 主要工作 针对极端多标签文本分类(Extreme ...

  10. 《windows核心编程系列》二谈谈ANSI和Unicode字符集

    第二章:字符和字符串处理 使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是 ...

最新文章

  1. 吴恩达老师深度学习视频课笔记:多隐含层神经网络公式推导(二分类)
  2. catia 快捷键 激活零件_CATIA基本操作技巧
  3. 2019 训练比赛 记录
  4. unity的自带特性
  5. SqlParameter的作用与用法
  6. go mysql 多并发_MySQL并发处理-Go语言中文社区
  7. Javascript正则
  8. yum更新指定的软件
  9. HDU 3639 Hawk-and-Chicken
  10. ApacheCN 翻译/校对/笔记整理活动进度公告 2019.10.18
  11. m2增长率曲线_中国通胀率(中国m2历年数据曲线图)
  12. 自动切换输入法 for Mac(输入法辅助工具)
  13. 算法工程师面试:必备的机器学习、深度学习知识点
  14. python3网络爬虫(2.1):爬取堆糖美女
  15. 关于LNK2000 _main 已经在 某某某.obj 中定义的问题
  16. 考研英语 单词常见熟词生义
  17. verilog prbs
  18. python yolov5 脚本制作(第一部分:环境搭建、yolov5源码、权重文件获取、pycharm配置、pytorch下载、初次运行yolov5代码)
  19. POI读取word里面的表格并处理数据
  20. 实验九.MATLAB数值积分

热门文章

  1. linux命令see的用法,Linux一些基本命令与用法
  2. linux autofs ftp,Linux NFS自动挂载autofs配置
  3. 移位寄存器专题(verilog HDL设计)
  4. FPGA之道(64)代码中的约束信息(一)保持约束
  5. Node安装node-sass总是下载超时问题解决
  6. [20170711]关于tmux共享会话问题.txt
  7. 腾讯云答治茜:云计算为独角兽和传统企业提供了哪些沃土?
  8. AngularJs的UI组件ui-Bootstrap分享(六)——Tabs
  9. .NET Core 使用Dapper 操作MySQL
  10. 查看mysql字符集及修改表字符集