如何使用 clang 为 linux-x64 制作 wchar_t 16 位?

exe*_*ook 3 64-bit wchar-t clang

我无法在 64 位 Linux 上使用 clang 将 wchar_t 编译为 16 位

printf("%i ", sizeof (wchar_t));
Run Code Online (Sandbox Code Playgroud)

印刷4

clang++ -fshort-char test.cpp
Run Code Online (Sandbox Code Playgroud)

虽然我使用 -fshort-char

我的问题是如何将 wchar_t 转换为 16 位。是#define唯一的选择吗?

#define wchar_t unsigned short
Run Code Online (Sandbox Code Playgroud)

Mik*_*han 6

使用 clang(或 gcc)使其成为 16 位的方法wchar_t是传递编译器选项-fshort-wchar(而不是-fshort-char)。

然而,这是一个相当严厉的措施,因为它可能会破坏调用标准库或第三方库传递wchar_t数据的代码。wchar_t请注意,无论编译器针对的是 32 位还是 64 位系统,gcc 和 clang默认情况下都是 32 位。在这方面,它们符合 C 标准 7.17/2,该标准要求wchar_t

整数类型,其值范围可以表示受支持的语言环境中指定的最大扩展字符集的所有成员的不同代码

当您调用时,clang++我假设您正在编译 C++ 源代码。如果您只需要 16 位宽的字符类型,并且可以使用选项 进行编译-std=c++11,则核心语言为您提供了char16_t,它适合存储任何 UTF-16 字符。(如果您希望能够存储任何 UTF-32 字符,char32_t也可以)。