读书人

MFC代码中的_T做什么的?该如何解决

发布时间: 2012-04-14 17:14:21 作者: rapoo

MFC代码中的_T做什么的?
最近学C++请问MFC 代码中为什么会用多的_T _TEXT他们有什么作用?达到这个作用是怎么实现的?
请告诉我原理,我本来是C#学生,后来看视频感觉C++真的很强大,所以来学C++体验底层。

[解决办法]
就是一个宏...

可以方便程序员写代码的, 程序员就可以肆无忌惮的不担心编码不一致的问题了, 一律用_T括起来就安全了..

否则有的地方用宽字符, 有的地方用GB的, 最后自己也不知道用的什么了.
[解决办法]
#define _T(x) __T(x)
#define __T(x) L ## x

就是和定义 L"test"一样的unicode字符,
当然这是在定义了unicode宏的情况下,
如果没有定义unicode宏那么就应该类似于
#define _T(x) ##x

[解决办法]
TCHAR *szError = L"Error";
字符串(literal string)前面的大写字母L,用于告诉编译器该字符串应该作为Unicode字符
串来编译。当编译器将字符串置于程序的数据部分中时,它在每个字符之间分散插入零字节。
这种变更带来的问题是,现在只有当定义了_UNICODE时,程序才能成功地进行编译。我们需
要另一个宏,以便有选择地在字符串的前面加上大写字母L。这项工作由_TEXT宏来完成,
_TEXT宏也在TChar.h文件中做了定义。如果定义了_UNICODE,那么_TEXT定义为下面的形
式:
#define _TEXT(x) L ## x
如果没有定义_UNICODE,_TEXT将定义为
#define _TEXT(x) x
使用该宏,可以改写上面这行代码,这样,无论是否定义了_UNICODE宏,它都能够正确
地进行编译。如下所示:
TCHAR * szError = _TEXT("Error");
_TEXT宏也可以用于字符串
[解决办法]
那个_T也是差不多的,你右键进入转到声明,追踪源代码就知道了,就是为了方便写代码统一,微软搞了个宏定义,TEXT(“。。。”),既可以表示长字符(unicode等两个字节编码),也可以表示短字符(ascii编码)

读书人网 >C++

热点推荐