如何使用微软提供的TCHAR.H头文件

 

如何使用微软提供的 TCHAR.H 头文件?

   

         如果你现在写的代码使用的是SBCS (ASCII)字符集,但是过一段时间后某个客户跟你说他们现在的系统只支持Unicode (wide-character)字符集,你怎么办呢?问题的答案就在微软给我们提供的tchar.h头文件里面!

        通过研究msdn知道,微软为了方便程序写出能够使用不同字符集的通用代码,特别为程序员提供了这个头文件,头文件的功能就是实现了 数据类型、函数以及其他对象依据宏定义进行map过程。

         msdn的对该文件的描述如下:

         To simplify transporting code for international use, the Microsoft run-time library provides Microsoft-specific

         generic-text mappings for many data types, routines, and other objects.

这样我们就可以使用TCHAR.H头文件中的定义的这些mapping写出可以运行于不同字符集上的通用代码;你所需要做的就是在包含该头文件后在编译器选项里面定义好所需要的宏或者在你的源文件里使用#define定义所需要的宏也可以。

需要说明的是TCHAR.H给出的mapping过程是微软专有的并不是ANSI标准,这点要注意,也就是说在微软之外的系统可能就不可以使用了。

在编译器编译过程中会检查你所定义的宏,然后将TCHAR.H文件中的以_tcs打头的函数转换成对应的str或wcs大头的函数。如果你要build一个使用UNICODE字符集的程序,则可以定义_UNICODE宏。如果要build一个single-byte的程序则不需要定义任何宏,单字节字符程序时默认的(对于WIN32是这样,对于WINCE默认则是unicode字符程序)。

我们特别要注意头文件中定义的类型--_TCHAR;这个类型也是与使用的字符集类型有关的,如果是单字符集则其被定义成char类型;如果是宽字符集程序则是wchar_t类型,是16bit的。

 

如果我们不知道自己的系统究竟使用的是什么字符集我们可以使用_tcs打头的系列函数和_TCHAR类型是不会错的,编译器在编译过程中自己会做出正确的映射。

我们给出一个例子:

如果我们这样写程序:

                    _TCHAR *RetVal, *szString;
                   RetVal = _tcsrev(szString);

 

如果预编译系统定义了宏_UNICODE ,则上述代码被翻译成如下:

                      wchar_t *RetVal, *szString;
                      RetVal = _wcsrev(szString);

如果没有定义宏_UNICODE ,则preprocessor maps 该代码to single-byte ASCII code:

           char *RetVal, *szString;
           RetVal = strrev(szString);

Thus you can write, maintain, and compile a single source code file to run with routines that are specific to either single byte or Unicode character sets.

 

 【注意】

            我们有时候会看到这样的函数wsprintf,有人会和swprintf比较,其实这两个函数对用用户来说是一样的,只不过前者是在 Winbase.h声明,Winbase.c中定义的;后者是在stdio.h, stdlib.h文件中声明。

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值