有人知道WCHAR有多老吗?我想它至少可以追溯到Windows NT 3.1。我推测当微软开始在Windows头文件中使用WCHAR时,wchar_t在C或C标准中都没有定义。如果我错了,请纠正我。 微软正处于一个不值得羡慕的位置,它必须支持声明和头文件:a)必须在C和C中工作;B)在非常不同的架构下编译(i86,MIPS,PowerPC,Alpha,...)和c)必须向后兼容为15年以上的老编译器编写的源代码。另外,任何突破性的变化和成千上万的书籍,参考手册,在线文档等在过去二十年中出版会突然成为错误的。 WCHAR是一个接口-一旦发布,它就被写在石头上,即使新代码不需要它。
6条答案
按热度按时间ggazkfy81#
wchar_t
是一个独特的类型,由C++标准定义。WCHAR
是 * 非 * 标准的,据我所知,只存在于Windows上,然而,它只是wchar_t
的一个typedef
(或者可能是一个宏),所以没有实际的区别。旧版本的MSVC没有将
wchar_t
作为一级类型-相反,它只是short
的typedef
微软引入
WCHAR
很可能是为了在任何编译器版本中表示“宽字符类型”,而不管wchar_t
是否作为本机类型存在。不过,您应该在代码中使用
wchar_t
,这就是它的用途。w6lpcovy2#
一个实际的区别是
WCHAR
在我的平台上不存在,仅对于Windows(并且不打算将程序移植到其他平台),并且包含必要的头文件,这是相同的(因为WCHAR
只是typedef
)。bjp0bcyl3#
有人知道
WCHAR
有多老吗?我想它至少可以追溯到Windows NT 3.1。我推测当微软开始在Windows头文件中使用WCHAR
时,wchar_t
在C或C标准中都没有定义。如果我错了,请纠正我。微软正处于一个不值得羡慕的位置,它必须支持声明和头文件:a)必须在C和C中工作;B)在非常不同的架构下编译(i86,MIPS,PowerPC,Alpha,...)和c)必须向后兼容为15年以上的老编译器编写的源代码。另外,任何突破性的变化和成千上万的书籍,参考手册,在线文档等在过去二十年中出版会突然成为错误的。
WCHAR
是一个接口-一旦发布,它就被写在石头上,即使新代码不需要它。xcitsw884#
实际上没有太大区别。它们都表示相同的底层类型。一个2字节宽度的值。
LibT很快就会给予你各种平台和C++标准之间真实的疯狂的差异:)
pxiryf3j5#
类型定义wchar_t WCHAR;// wc,16位UNICODE字符
这是在winnt.h中定义的。因此最初它是wchar_t,WCHAR是它的缩写。您可以使用wcscat、wcslen等函数来表示这两个值
5f0d552i6#
Microsoft官方文档如下:https://learn.microsoft.com/en-us/windows/win32/winprog/windows-data-types
WCHAR 16位Unicode字符。有关详细信息,请参阅字体使用的字符集。
此类型在WinNT. h中声明如下:
类型定义wchar_t WCHAR;