代码之家  ›  专栏  ›  技术社区  ›  Marlon

wchar不只是一个无符号short的typedef吗?

  •  16
  • Marlon  · 技术社区  · 16 年前

    例如,是否:

    wchar_t x;
    

    翻译为:

    unsigned short x;
    
    6 回复  |  直到 14 年前
        1
  •  20
  •   Artyom    16 年前

    简而言之:C中可能是C++。

    广泛。c将wchar_t定义为typedef,但在Unix中,它通常是4个字节(通常不短),在Windows2中,它可能短。

    在C++下,它是独一无二的内置类型。 char int ,这样你就可以合法地超载 void foo(short x) void foo(wchar_t x)

        2
  •  14
  •   Cameron    14 年前

    对于任何其他可能会遇到此答案的人,因为Visual Studio项目中的函数调用不会链接,尽管双方都采用 wchar_t (或类似类型,如 LPCTSTR 定义了unicode),当您转储库的导出时,函数将 const unsigned short * ,请注意,Vs允许您关闭 乌恰 作为内置类型。如果有人在库中更改了这个,而您没有在项目中点击相同的编译器开关,那么它将不会链接。

    这个选项可以在“ProjtProjts&G/C/C++/Looal/WalgaLtt为内置类型”下更改,也可以通过“/ZC”选项进行更改。

        3
  •  11
  •   sbi    16 年前

    对于C, wchar_t 是一个 typedef . 它是否是 unsigned int ,无论它是一个无符号类型,还是4个字节,都是实现定义的。

    在C++中, 乌恰 是一个独特的内置类型。这里也定义了它的大小和签名。

        4
  •  1
  •   John Knoeller    16 年前

    标准不要求wchar-t未签名。也可以签名。并且必须有另一个大小相同的类型;但是标准并没有明确地说另一个类型必须是短的。

    “相同的大小、图形和对齐要求作为其他一种积分类型,称为其基础类型”(C++ 98×3.3.1)。

    在C编译器中,这是一个typedef,通常在stddef.h中定义。

        5
  •  1
  •   kyoryu    16 年前

    不,它不是。它翻译成“一个宽广的人物”。对这件事做任何假设。 碰巧是 在一个特定的平台上是不正确的,并且击败了 全部目的 一开始有一个wchar-u-t。

    使用抽象的目的是将类型的语义含义与其底层表示分离开来。

        6
  •  0
  •   Jonathan Leffler    16 年前

    不一定;它可以是4字节的数量,或者实际上是由实现选择的任何其他大小。

    这取决于编译器。