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

sti*_*mms 17 c++

有没有之间的任何实际差别WCHARwchar_t

jal*_*alf 15

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

WCHAR规范的,据我所知,只存在于Windows.然而,它只是一个typedef(或可能是一个宏)wchar_t,所以它没有实际的区别.

MSVC的旧版本并没有wchar_t作为第一类类型,相反,它只是一个typedef用于short

最有可能的是,Microsoft引入WCHAR了代表任何编译器版本的"宽字符类型",无论是否wchar_t作为本机类型存在.

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


Kon*_*lph 12

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

  • @Mayur 我回答的第一句话暗示建议使用`wchar_t`。除了与内部 Windows API 保持一致之外,现在并没有真正好的理由去使用 `WCHAR`。认为它已经过时了。 (2认同)

Eur*_*lli 5

有人知道几岁WCHAR吗?我想它至少可以追溯到 Windows NT 3.1。我推测当微软开始WCHAR在 Windows 头文件wchar_t中使用时,C 或 C++ 标准中都没有定义。如果我错了,请纠正我。

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

WCHAR 是一个接口——一旦发布,它就是一成不变的,即使新代码不需要它。