本片文章转载自: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嘛,个人认为还是不要在代码中直接使用

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

也说_T、_TEXT、TEXT、L的更多相关文章

  1. 宽字符————_T、_TEXT、L、TEXT之间的区别

    _T._TEXT.L.TEXT之间的区别 在分析前先对三者做一个简单的分类 _T._TEXT.TEXT三者都是根据编译器的环境进行ANSI/UNICODE变换的,_T和_TEXT是根据_UNICODE ...

  2. VC 中与字符串相关的宏 _T、TEXT,_TEXT、L 的作用

    CSDN原博文:http://blog.csdn.net/houkai363/article/details/8134787 遇到了:不能将参数 1 从“const char [5]”转换为“LPCT ...

  3. VC 中与字符串相关的宏 _T、TEXT,_TEXT、L 的作用(简单明了)

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

  4. 关于 char 、 wchar_t 、 TCHAR 、 _T() ||| 宏 _T 、 TEXT 、 _TEXT 、 L

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

  5. win32编程:L,_T() ,TEXT和_TEXT

    L的使用: 在字符串前面的大写字母L,用来告诉编译器该字符串应该作为Unicode来编译.它用来将ASNI转换为Unicode,Unicode字符串中每个字符占16位(两个字节),而在ASNI中每个字 ...

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

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

  7. _T(x) _TEXT(x) L 代表什么?

    首先  <tchar.h>中 #ifdef  _UNICODE .... #define __T(x)      L ## x  //替换 #else   /* ndef _UNICODE ...

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

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

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

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

  10. mysql列类型char,varchar,text,tinytext,mediumtext,longtext的比较与选择

    储存不区分大小写的字符数据 TINYTEXT 最大长度是 255 (2^8 – 1) 个字符. TEXT 最大长度是 65535 (2^16 – 1) 个字符. MEDIUMTEXT 最大长度是 16 ...

随机推荐

  1. SecureCRT 终端仿真程序 v7.0.0.326 中文绿色便携破解版

    http://wd.jb51.net:81/201205/tools/SecureCRT_jb51.rar Secure CRT是一款支持 SSH2.SSH1.Telnet.Telnet/SSH.Re ...

  2. MS-SQLSERVER中的MSDTC不可用解决方法

    今天在本地机直接在触发器里更新还有一台服务器数据时出现: MSDTC不可用  解决的方法:  在windows控制面版-->管理工具-->服务-->Distributed   Tra ...

  3. 向架构师进军---&gt;怎样编写软件架构文档

    假设你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",增加这个PM.架构师的大家庭 问:为什么要编写软件架构文档,它的优点是什么? 答: 有文档的架构有助于不同利益相关 ...

  4. Oracle Enterprise Linux 64-bit下安装apache-tomcat-7.0.53步骤

    測试环境:VMware Workstation v9.0.2软件中安装好Oracle Enterprise Linux 5.8 64-bit虚拟机 安装软件:jdk-7u40-linux-x64.rp ...

  5. play wav sound

    播放 WAV文件             string s = @"D:\Administrator\安装文件\完美世界国际版\patcher\skin\sounds\click.wav&q ...

  6. java21 封装Response:

    封装Response: /** * 封装响应信息 */ public class Response { //两个常量 public static final String CRLF="\r\ ...

  7. [转] 如何在 Ubuntu 14.04 上通过 apt-get 安装 Apache Tomcat 7

    PS:war 部署路径:/var/lib/tomcat7/webapps http://www.linfuyan.com/how-to-install-apache-tomcat7-on-ubuntu ...

  8. BULK INSERT将CSV或TXT文件导入到SQL Server

    CSV代表逗号分隔值,有时也被称为逗号分隔的值.而 如果加载txt文件,然后文件应该有逗号分隔的值.和文件应该是这样 下面是该脚本以创建表: CREATE TABLE Employee( Id int ...

  9. Ubuntu server搭建vsftpd小记

    Ubuntu server中搭建vsftpd小记 <h1> 在Ubuntu server中安装vsftpd</h1> sudo apt-get install vsftpd & ...

  10. (转)Ilist 和list的区别归纳总结

    常见问题: Ilist <> 本身只是一个泛型接口, 既然是接口当然不能实例化,只能用如下方法 IList <Class1> IList11 =new List <Cla ...