关闭

宏_T、_TEXT、TEXT、L区别

855人阅读 评论(0) 收藏 举报
分类:

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

而我嘛,写这篇东东当是给自己一个提醒,因为之前直接使用了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嘛,个人认为还是不要在代码中直接使用

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

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

TEXT() 宏,以宏UNCODE为其开关,代表windows 编程风格;_T() 宏,以宏_UNCODE为其开关,代表C/C++编程风格

UNICODE VS _UNICODE 与 TEXT() VS _T() 在 Windows 上编程,当使用字符串时常会使用: TEXT() 宏_T() 宏 这两个宏作用是对字符串常量进行分类,下面的代码中: LPTSTR lpStrA = TEXT("Hello")...
  • haiross
  • haiross
  • 2015-04-17 08:44
  • 1076

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

一、 在字符串前加一个L作用:    如  L"我的字符串"    表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。  strlen("asd") &#...
  • adcxf
  • adcxf
  • 2008-06-12 18:55
  • 1177

TEXT宏

TEXT   The   TEXT   macro   identifies   a   string   as   Unicode...
  • ArduousBonze
  • ArduousBonze
  • 2007-05-17 19:39
  • 2234

_T、_TEXT和TEXT宏的作用

1.在字符串前加一个L作用。 如:L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。 strlen("asd")   =   3; 而strlen(L&quo...
  • piaopiaopiaopiaopiao
  • piaopiaopiaopiaopiao
  • 2014-04-30 09:09
  • 488

MFC中的_T宏

VC中_T()的作用www.firnow.com    时间 : 2008-04-22  作者:佚名   编辑:本站 点击:  382 [ 评论 ]--综合 资源 电子书 社区   Windows使用两种字符集...
  • panjean
  • panjean
  • 2010-11-15 21:23
  • 4983

L宏和T宏

_T是一个宏,定义于tchar.h下。作用是让你的程序支持Unicode编码.     Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双...
  • yangmeng900816
  • yangmeng900816
  • 2015-03-03 13:48
  • 743

批量转换TEXT文字的角度-CAD宏-编程-VBA

  • 2013-08-02 17:46
  • 15KB
  • 下载

VC中_T、_TEXT和TEXT宏的作用(来自互联网)

<br />1.在字符串前加一个L作用。<br />如:L"我的字符串" 表示将ANSI字符串转换成unicode的字符串,就是每个字符占用两个字节。<br />strlen("asd")   =...
  • yp1987320
  • yp1987320
  • 2011-01-10 14:43
  • 406

TCHAR和TEXT宏

1.TCHAR宏: TCHAR是通过define定义的字符串宏 c++支持两种字符串分别是常规的ANSI编码(使用""),和UNICODE编码(使用L""),这样就有两套字符串处理函数,例如strlen()和wcslen(),分别对应两种字符串 微软将这...
  • zzyoucan
  • zzyoucan
  • 2013-07-21 18:50
  • 2091

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

一、 在字符串前加一个L作用:     如 L"我的字符串"表示将ANSI字符串转换成unicode 的字符串,就是每个字符占用两个字节。    strlen("...
  • tzs33
  • tzs33
  • 2015-01-17 10:04
  • 235
    个人资料
    • 访问:370743次
    • 积分:4494
    • 等级:
    • 排名:第7764名
    • 原创:63篇
    • 转载:248篇
    • 译文:0篇
    • 评论:53条
    最新评论