欢迎光临散文网 会员登陆 & 注册

宏_T、_TEXT、TEXT、L区别

2021-02-02 23:18 作者:kekeed  | 我要投稿

宏_T、_TEXT、TEXT、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)


宏_T、_TEXT、TEXT、L区别的评论 (共 条)

分享到微博请遵守国家法律