【发布时间】:2011-01-24 15:05:29
【问题描述】:
例如,确实:
wchar_t x;
翻译成:
unsigned short x;
【问题讨论】:
-
Marlon,答案取决于你问的是 C 还是 C++。你想知道其中之一还是两者都知道?
标签: c++ c unsigned short wchar-t
例如,确实:
wchar_t x;
翻译成:
unsigned short x;
【问题讨论】:
标签: c++ c unsigned short wchar-t
简而言之:在 C 中可能在 C++ 中没有。
广泛。 C 将 wchar_t 定义为 typedef,但在 Unix 中它通常为 4 个字节(因此通常不短),而在 Windows 2 中则可能很短。
在 C++ 下,它是唯一的内置类型,如 char 或 int,因此您可以合法地重载 void foo(short x) 和 void foo(wchar_t x)
【讨论】:
对于可能遇到此答案的任何其他人,因为您的 Visual Studio 项目中的函数调用不会链接,尽管双方都采用 wchar_t(或类似类型,例如带有 UNICODE #defined 的 LPCTSTR),并且当您 DUMPBIN 库的导出函数采用 const unsigned short * 时,请注意 VS 允许您将 wchar_t 作为内置类型关闭。如果有人在库中更改了它,而您没有在项目中点击相同的编译器开关,它将不会链接。
这个选项可以在“Project Properties>C/C++/Language/Treat WChar_t as Builtin type”下更改,也可以通过“/Zc”选项更改。
【讨论】:
对于 C,wchar_t 是 typedef。无论是unsigned int 的同义词,还是完全无符号类型,还是4 字节,都是实现定义的。
在 C++ 中,wchar_t 是一个独特的内置类型。在这里,它的大小和符号也是由实现定义的。
【讨论】:
标准不要求 wchar_t 是无符号的。也可以签名。并且必须有另一个相同大小的类型;但标准并没有明确说明其他类型必须是短的。
“与其他整数类型之一相同的大小、符号和对齐要求,称为其基础类型”(C++98 §3.9.1)。
在 C 编译器中这是一个 typedef,通常在 stddef.h 中定义
【讨论】:
sizeof(wchar_t) == 2 或 4,它依赖于平台。一般只有windowswchar_t有16位。
不,它没有。它翻译为“宽字符”。对特定平台上的可能是什么做出任何假设都是不正确的,并且首先破坏了拥有 wchar_t 的全部目的。
使用抽象的目的是将类型的语义含义与其底层表示分开。
【讨论】:
不一定;它可以是一个 4 字节的数量,或者实际上是实现选择的任何其他大小。
这取决于编译器。
【讨论】:
typedef。
wchar_t 是typedef。 C 标签是你的,不是 Marlon 的。对于 C,正确答案是 Yes,而对于 C++,正确答案是 No。