读书人

UNICODE的一些有关问题求教

发布时间: 2012-02-28 13:06:35 作者: rapoo

UNICODE的一些问题求教
最近看unicode那章看的头好晕..有些问题不明白
问题1:
#ifdef UNICODE
typedef WCHAR TCHAR, * PTCHAR ;
typedef LPWSTR LPTCH, PTCH, PTSTR, LPTSTR ;
typedef LPCWSTR LPCTSTR ;
#else
typedef char TCHAR, * PTCHAR ;
typedef LPSTR LPTCH, PTCH, PTSTR, LPTSTR ;
typedef LPCSTR LPCTSTR ;
#endif

如果定义了标识符UNICODE(没有底线),则TCHAR和指向TCHAR的指标就分别定义为WCHAR和指向WCHAR的指标;如果没有定义标识符UNICODE,则TCHAR和指向TCHAR的指标就分别定义为char和指向char的指标

那什么叫 "定义了标识符UNICODE " ,是编译器的开关吗 ?如果是,在Dev-C++中怎么设置?

问题2:
windows中有字符串作参数的函数都有两个版本,分别支持unicode和asci, 那是不是指写程序的时候要用 TCHAR, LPTCH,PTCH这些宏,而不是c中的字符数组 ?

好多宏我分不大清,像 TCHAR ,_TEXT ,__T, PTSTR, PSTR 他们分别是描述什么的
还有这句话怎么理解 " 将文本串视为字符数组,而不是chars数组或字节数组。 "


谢了

[解决办法]
UNICODE是可以在编译的时候有编译器选项指定,比如
g++ -DUNICODE ...
当然你也可以在文件开头自己定义
#define UNICODE

如果你让你的程序支持unicode版本或ascii版本而不修改源程序,那就将所有与字符相关的类型都用含T的宏代替,这样你编译的时候指定UNICODE时,你的程序就是unicode版本,不指定unicode时,你的程序就是ascii版本

TCHAR上面有定义,分别是WCHAR或char
PTSTR分别是WCHAR*或char*
PSTR就是char*
_TEXT和_T是一样的,就是把字符串常量根据UNICODE宏变成相应的宽字符串或普通的字符串
#ifdefine UNICODE
#define _TEXT(x) L(x)
#else
#define _TEXT(x) x
#endif
[解决办法]
便以条件 / 宏

他就是改了个名字,管你用啥呢
UNICODE / ANSI

读书人网 >C语言

热点推荐