c++ TCHAR和WCHAR有什么区别?

piztneat  于 2023-02-26  发布在  其他
关注(0)|答案(5)|浏览(120)

我已经打开winnt. h头文件,发现有这两行:

typedef wchar_t WCHAR;

以及

typedef WCHAR TCHAR, *PTCHAR;

但是在我的一个帖子里有评论说他们之间有一些区别。那么区别是什么呢?

e4eetjau

e4eetjau1#

如果您阅读整个标题,您会发现:

#ifdef _UNICODE
typedef WCHAR TCHAR;
#else
typedef char TCHAR;
#endif

或者类似的话。
也许微软已经取消了最近的狭隘选择。

nkcskrwz

nkcskrwz2#

TCHAR可以是charWCHAR,具体取决于平台。WCHAR始终是16位Unicode字符wchar_t

p1iqtdky

p1iqtdky3#

http://msdn.microsoft.com/en-us/library/aa383751%28VS.85%29.aspx
什么?
如果定义了UNICODE,则为WCHAR,否则为CHAR。
WCHAR:
16位Unicode字符。有关详细信息,请参阅字体使用的字符集。

fkvaft9z

fkvaft9z4#

从技术上讲没有区别,因为你不能把两个不同的实体定义为一个实体。让我们看一个例子...

typedef char a;
typedef char  b;
typedef a b, c;

此定义有效,但如果将上述定义更改为

typedef char a;
typedef char * b;
typedef a b, c;

*错误1错误C2040:“B”:“a”与“char "的间接级别不同
另一个

typedef char a;
typedef int b;
typedef a b, c;

错误1错误C2371:“B”:重新定义;不同的基本类型

所以通过分析这些东西,只有相同的类型才能定义在一起。

qv7cva1a

qv7cva1a5#

TCHAR是可移植类型,对于ANSI类型项目是char,对于UNICODE项目是WCHAR(16位Unicode字符)。使用TCHARTCHAR */LPSTR,您可以创建可移植项目,该项目可以轻松地重新编译为ANSI和UNICODE版本。但在Windows 98/ME过时且很少使用后,就不需要创建非Unicode可执行文件了。

相关问题