WCHAR
和wchar_t
之间是否存在实际差异?
答案 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等功能