_T、_TEXT、L、TEXT之间的区别

在分析前先对三者做一个简单的分类

_T、_TEXT、TEXT三者都是根据编译器的环境进行ANSI/UNICODE变换的,_T和_TEXT是根据_UNICODE来确定宏,而TEXT是根据UNICODE来确定宏,

(_UNICODE宏用于C运行期头文件,而UNICOED则用于Windows头文件,当编译源代码模块时,通常必须同时定义这两个宏

第一种:L" "

在字符串前加一个大写字母L表示,告诉编译器这个字符串按照宽字符来存储,每个字符占2个字节

格式为或者,L的特点就是无论以什么方式编译,一律按照Unicode来编译(即每个字符占两个字节),这里说每个字符占两个字节,是因为Unicode字符集一般是指UTF-16编码的Unicode,但Unicode字符集不等于每个字符占两个字符

在VC2010Express下可以通过项目--属性--配置属性--常规来看编译方式

当使用Unicode字符集时,可以在C/C++--预处理器看到预编译宏_UNICODE和UNICODE

当设置为使用多字节字符集时,预编译宏会变为_MBCS

第二种:_T()和_TEXT()

_T和_TEXT都在头文件tchar.h中定义,在字符串之间加_TEXT或者是_T的效果是一样的,与L不同的是,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变

(意思是如果编译环境使用的多字符节字符集 或者是 未设置,那么字符串不变),_T和_TEXT是根据_UNICODE来确定宏的

在tchar.h中可以找到如下的宏定义

使用格式:(注意:圆括号是不能省略的)

下面把环境改成多字节字符集

char ss[] = _T("Hello World");
wchar_t mm[] = L"Hello World";
printf("%s\n", ss);
wprintf(L"%s", mm);

上面的代码中ss这个窄字符数组后面的字符串前面加了一个_T,但因为环境是多字节字符集,_T并没有起作用,字符串内容不变仍然按照窄字符存储,而第二个宽字符数组mm就不能写成_T或者_TEXT

因为不能把一个窄字符串存储到一个宽字符数组中,如果写成那么在编译阶段就会报错

第三种:TEXT()

需要注意的是如果只#include<WinNT.h>编译器是会报错的,需要在#include<WinNT.h>前加上#include <Windows.h>才能使用TEXT,TEXT是根据UNICODE来确定宏的,因为当编译环境使用Unicode字符集时,

因为预编译宏包含了_UNICODEUNICODE,所以在使用Unicode字符集的环境下_T、_TEXT、TEXT都可以使用

使用格式:

宽字符————_T、_TEXT、L、TEXT之间的区别的更多相关文章

  1. C语言之“字符”与“字符串”之间的区别解析

    在C语言中,“字符”与“字符串”之间,是有区别的.这一篇文章中,我们将介绍一下,在C语言中的“字符”与“字符串”,它们之间的区别. 首先,一个很明显的区别是: “字符”,使用单引号作为定界符,而“字符 ...

  2. 也说_T、_TEXT、TEXT、L

    本片文章转载自:http://www.cnblogs.com/sobe/archive/2011/03/14/1984188.html 百度或谷歌一下,有很多大牛早已经写过无数相关的文章说明这几个宏的 ...

  3. c++字符前面的L和_T

    字符串前面加L表示该字符串是Unicode字符串._T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变.因此,Visual C++里边定 ...

  4. 通过编写串口助手工具学习MFC过程——(三)Unicode字符集的宽字符和多字节字符转换

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...

  5. C++中_T()和L的区别

    转载:https://blog.csdn.net/amusi1994/article/details/53898960 前言 本文旨在介绍于VC++常见的两个类型:_T()和L   概念 字符串前面加 ...

  6. C++多字节字符转换为宽字符的两种方法

    目前知道有两种方式:可以提供宽字符与ANSI字符之间的转换, 第一种由COM库提供的函数 char*  _com_util::ConvertBSTRToString(BSTR ); BSTR _com ...

  7. C语言小程序——推箱子(窄字符和宽字符)

    C语言小程序——推箱子(窄字符Version) 推箱子.c #include <stdio.h> #include <conio.h> #include <stdlib. ...

  8. 彻底解密C++宽字符(二)

    彻底解密C++宽字符(二) 转:http://club.topsage.com/thread-2227977-1-1.html 4.利用codecvt和use_facet转换 locale和facet ...

  9. 宽字符wchar_t和窄字符char区别和相互转换

    转自:http://blog.csdn.net/nodeathphoenix/article/details/7416725 1.    首先,说下窄字符char了,大家都很清楚,就是8bit表示的b ...

随机推荐

  1. OS模块的介绍

    os,语义为操作系统,模块提供了访问多个操作系统服务的功能,可以处理文件和目录这些我们日常手动需要做的操作.os和它的子模块os.path还包括一些用于检查.构造.删除目录和文件的函数,以及一些处理路 ...

  2. Python入门:Anaconda和Pycharm的安装和配置

    Python入门:Anaconda和Pycharm的安装和配置  转自:https://www.cnblogs.com/yuxuefeng/articles/9235431.html 子曰:“工欲善其 ...

  3. C语言冷知识

    C语言属强类型语言(1)编程语言分2种:强类型语言和弱类型语言.强类型语言中所有的变量都有自己固定的类型,这个类型有固定的内存占用,有固定的解析方法:弱类型语言中没有类型的概念,所有变量全都是一个类型 ...

  4. Communication Model

    [Communication Model] EOSIO actions operate primarily in a message-based communication architecture. ...

  5. 外网访问Vmware虚拟机中的某个服务(如http)

    如果主机是windowx NAT中隐藏的端口映射,说明一下环境,利用当然是VMnet8网络连接,在虚拟机中架设linux WEB服务器利用WEB默认80端口,IP为192.168.11.10,真实主机 ...

  6. shell命令,从字符串中提取数字

    echo "2014年7月21日" | tr -cd "[0-9]" 这样就可以提取出2014721

  7. ASP 错误捕捉,处理

    Asp利用 On Error Resume Next捕捉异常,根据Err.Number判断是否有错误 注:On Error Goto 0取消捕捉异常 模板文件页面 <% Response.Buf ...

  8. 100-days: fifteen

    Title: Disney(迪士尼) moves from behemoth to colossus with closing(使…结束,使停止) of Fox(福克斯) deal(商业上的交易/协议 ...

  9. 360. Sort Transformed Array二元一次方程返回大数序列

    [抄题]: Given a sorted array of integers nums and integer values a, b and c. Apply a quadratic functio ...

  10. Add custom field in Material Master

    1.Add fields in the Append Structure of table MARA. 2.Configure SPRO IMG -> Logistics General -&g ...