c++ “WCHAR”和“wchar_t”之间的区别是什么?

js5cn81o  于 2023-03-09  发布在  其他
关注(0)|答案(6)|浏览(253)

WCHARwchar_t之间有什么实际区别吗?

ggazkfy8

ggazkfy81#

wchar_t是一个独特的类型,由C++标准定义。
WCHAR是 * 非 * 标准的,据我所知,只存在于Windows上,然而,它只是wchar_t的一个typedef(或者可能是一个宏),所以没有实际的区别。
旧版本的MSVC没有将wchar_t作为一级类型-相反,它只是shorttypedef
微软引入WCHAR很可能是为了在任何编译器版本中表示“宽字符类型”,而不管wchar_t是否作为本机类型存在。
不过,您应该在代码中使用wchar_t,这就是它的用途。

w6lpcovy

w6lpcovy2#

一个实际的区别是WCHAR在我的平台上不存在,仅对于Windows(并且不打算将程序移植到其他平台),并且包含必要的头文件,这是相同的(因为WCHAR只是typedef)。

bjp0bcyl

bjp0bcyl3#

有人知道WCHAR有多老吗?我想它至少可以追溯到Windows NT 3.1。我推测当微软开始在Windows头文件中使用WCHAR时,wchar_t在C或C标准中都没有定义。如果我错了,请纠正我。
微软正处于一个不值得羡慕的位置,它必须支持声明和头文件:a)必须在C和C
中工作;B)在非常不同的架构下编译(i86,MIPS,PowerPC,Alpha,...)和c)必须向后兼容为15年以上的老编译器编写的源代码。另外,任何突破性的变化和成千上万的书籍,参考手册,在线文档等在过去二十年中出版会突然成为错误的。
WCHAR是一个接口-一旦发布,它就被写在石头上,即使新代码不需要它。

xcitsw88

xcitsw884#

实际上没有太大区别。它们都表示相同的底层类型。一个2字节宽度的值。
LibT很快就会给予你各种平台和C++标准之间真实的疯狂的差异:)

pxiryf3j

pxiryf3j5#

类型定义wchar_t WCHAR;// wc,16位UNICODE字符
这是在winnt.h中定义的。因此最初它是wchar_t,WCHAR是它的缩写。您可以使用wcscat、wcslen等函数来表示这两个值

5f0d552i

5f0d552i6#

Microsoft官方文档如下:https://learn.microsoft.com/en-us/windows/win32/winprog/windows-data-types
WCHAR 16位Unicode字符。有关详细信息,请参阅字体使用的字符集。
此类型在WinNT. h中声明如下:
类型定义wchar_t WCHAR;

相关问题