'WCHAR'和'wchar_t'有什么区别?

时间:2009-02-18 16:33:00

标签: c++

WCHARwchar_t之间是否存在实际差异?

5 个答案:

答案 0 :(得分:15)

wchar_t是一种独特的类型,由C ++标准定义。

WCHAR标准,据我所知,仅存在于Windows上。但是,typedef只是wchar_t(或可能是宏),因此没有实际意义。

较旧版本的MSVC没有wchar_t作为头等类型 - 而只是typedef的{​​{1}}

最有可能的是,Microsoft引入short代表任何编译器版本的“宽字符类型”,无论WCHAR是否存在为本机类型。

您应该在代码中使用wchar_t。这就是它的用途。

答案 1 :(得分:12)

嗯,一个实际的区别是我的平台上不存在WCHAR。仅对于Windows(并且无意将程序移植到另一个平台)并且包含必要的标头,它们是相同的(因为WCHAR只是typedef)。

答案 2 :(得分:4)

有人知道WCHAR多大了吗?我想它至少可以追溯到Windows NT 3.1。我推测,当Microsoft在Windows标头中开始使用WCHAR时,{C}或C ++标准中未定义wchar_t。如果我错了,请纠正我。

微软处于不利的地位,必须支持声明和标题,a)必须在C和C ++中工作; b)在非常不同的架构下编译(i86,MIPS,PowerPC,Alpha,...)和c)必须向后兼容为15年以上编译器编写的源代码。此外,在过去二十年中发布的任何重大变化和数以千计的书籍,参考手册,在线文档等都会突然变得错误。

WCHAR是一个界面 - 一旦它被发布,它就是一成不变的,即使新代码不需要它。

答案 3 :(得分:0)

实际上说没有太大区别。它们都代表相同的基础类型。 2字节宽度值。

LibT将很快为您提供各种平台与C ++标准之间真正疯狂的差异:)

答案 4 :(得分:0)

typedef wchar_t WCHAR; // wc,16位UNICODE字符

这是在winnt.h中定义的。原来它是wchar_t WCHAR是对它的禁止。你可以使用wcscat,wcslen等功能