也说_T、_TEXT、TEXT、L
来源:互联网 发布:云服务器域名绑定 编辑:程序博客网 时间:2024/05/20 11:46
原帖地址: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
- 也说_T、_TEXT、TEXT、L
- _T、_TEXT、TEXT、L
- L、TEXT、_TEXT、_T 用法说明
- 宏_T、_TEXT、TEXT、L区别
- 关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT
- 关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT
- 关于 char 、 wchar_t 、 TCHAR 、 _T() ||| 宏 _T 、 TEXT 、 _TEXT 、 L
- visu studio编程中L、TEXT、_TEXT、_T 用法说明
- VS中宏 _T、TEXT,_TEXT、L 的作用:
- C++,Windows/MFC_中L、_T、TEXT、_TEXT区别
- MFC中L, _T(),TEXT,_TEXT区别以及含义
- TEXT和_T,_TEXT
- 关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT、L
- 关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT、L
- 关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT、L
- 关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT、L
- 关于char, wchar_t, TCHAR, _T(),L,宏 _T、TEXT,_TEXT、L
- Linux HAL (Hardware Abstraction Layer)的工作原理
- ORA-07445与ORA-00108错误
- 了解JVM的内存管理与垃圾回收
- 程序员技术练级攻略
- C/C++文本文件件编码格式
- 也说_T、_TEXT、TEXT、L
- TCP,UDP,ICMP,IP协议解释?
- spring aop 简单实例
- Emacs 命令一点点来吧
- 揭开Wayland的面纱(一):X Window的前生今世
- vc将窗口置顶的SetWindowPos()函数以及相关
- 行转列.列转行 oracle
- 苹果耍流氓、非法收集惹了火~
- 黑马程序员Java培训、Android培训_JavaAPI-2