L" " 和 _T" "的区别? 如题! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Visual C++里边定义字符串的时候,用_T来保证兼容性,VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。 L则是Unicode的类型 L表示这个字串要用UNICODE编码来编译,_T如果定义了_UNICODE宏就按UNICODE来编译,否则就按ANSI来编译 L 是根本,_T 只是形式。看如下定义:如果定义了_UNICODE标识符,那么一个称作__T的宏就定义如下:#define __T(x) L##x 如果没有定义_UNICODE标识符,则__T宏只简单地定义如下:#define __T(x) x///////举个例子,即可明白:CString str = _T("12345");在非 UNICODE 工程下等于:CString str = "12345";在 UNICODE 工程下等于:CString str = L"12345";这个在编译时就决定了,其实就是个宏替换。明白否?还不明白,就看『Windows程序设计』第二章【UNICODE简介】,下载地址:http://blog.csdn.net/zaodt/archive/2007/11/25/1901332.aspx 字符串前面加L表示该字符串是Unicode字符串。_T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变。 L是表示Unicode_T可以是UNICODE,也可以是ansi,看编译设置 简而言之,这是一种“自适应”技术,有的书称呼_T为垫片宏(COM本质论甚至特别为此设计了一个垫片类,功能完全一样)这里要更正zhaodt,设计_T不是仅仅为了形式,而是为了使软件编程更容易。绝大多数情况下,你应该使用_T而不是L原因是:这种编程风格允许是在MCBS和Unicode两种设置种切换。你程序是在MCBS方式下测试和编写的,后来想切换成Unicode方式,只要增加一个_UNICODE宏定义即可,代码几乎不要修改。而如果你写L"abc",则字符串被强制设置宽字符,这种字符串在使用时你必须确保所有的相关API都必须是宽字符的。例如:VS2005缺省是unicode模式下的,因此你写L"abc"不会有问题,但是对于下面代码CString str = L"abc";假如你有一天突然想换成MCBS,则上面这么简单的代码都会报错,而下面代码则不需要担心这个CString str = _T("abc") _T只是一个宏,它会识别上下文来指定编码方式,而L是一个编码标识是固定的,像3.0f就是表示浮点数 好像在windef.h文件中有关于这两个宏的定义,具体可以全文搜索一下,不是很难找的。 上面说的已经差不多了,另外L"xxx";是编译器支持的,而_T("xxx");是宏支持的,VC需tchar.h头文件,gcc中未定义。 这个论述误导了后面很多结论哦L只是宽字符字符串的前缀。[code] const wchar_t *xx = L"xxxxxx";[/code]上面这个语句无论是UNICODE工程还是非UNICODE工程都没有问题的说。 const wchar_t *xx = L"xxxxxx";这个语句。 如何通过HBITMAP句柄进行打印图像 动态库里加对话框为什么弹不出来? 请问如何选择性的让自己加入的菜单条中的菜单项有效啊 2k 和xp中,我用了同一个程序,去对同一个文件操作,但文件结果不一样!我想问一下是不是,memcpy这个函数在两个系统中的问题 怎麼樣把我下面的xml格式的文件里面的结点中值循环读出来 请问如何创建自己的Application Wizard? 谁有<<深入浅出MFC>>?高分渴求! 组态软件的上位机软件是用什么开发的? tapi3.0例子代码 不好意思:Searph是干什么的? 参数后面带符号是什么意思? 对话框自销毁问题!
L则是Unicode的类型
L 是根本,_T 只是形式。
看如下定义:
如果定义了_UNICODE标识符,那么一个称作__T的宏就定义如下:#define __T(x) L##x
如果没有定义_UNICODE标识符,则__T宏只简单地定义如下:#define __T(x) x///////举个例子,即可明白:CString str = _T("12345");在非 UNICODE 工程下等于:CString str = "12345";在 UNICODE 工程下等于:CString str = L"12345";这个在编译时就决定了,其实就是个宏替换。
明白否?
还不明白,就看『Windows程序设计』第二章【UNICODE简介】,下载地址:
http://blog.csdn.net/zaodt/archive/2007/11/25/1901332.aspx
_T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变。
_T可以是UNICODE,也可以是ansi,看编译设置
CString str = L"abc";假如你有一天突然想换成MCBS,则上面这么简单的代码都会报错,而下面代码则不需要担心这个
CString str = _T("abc")
L"xxx";是编译器支持的,而
_T("xxx");是宏支持的,VC需tchar.h头文件,gcc中未定义。
这个论述误导了后面很多结论哦L只是宽字符字符串的前缀。
[code] const wchar_t *xx = L"xxxxxx";[/code]
上面这个语句无论是UNICODE工程还是非UNICODE工程都没有问题的说。