6

在 Mac OS X 系统上浏览文件 wchar.h 时,我发现当未定义 __cplusplust 并且 wchar_t 的最大大小为 2 字节时(通过使用编译器选项 -fshort -wchar)。

似乎对于 C 程序,如果定义了 -fshort-wchar,则不允许使用此类函数。我想知道使用 -fshort-wchar 时使用 wchar_t 函数的含义是什么?

您可能想知道为什么我需要使用 -fshort-wchar。因为,我正在移植一个最初为 Windows 编写的应用程序,其中 wchar_t 的大小为两个字节。保存在 wchar_t 字符串中的数据被写入文件,并且还在两个应用程序之间交换。

什么是处理不同平台上 wchar_t 可变性的好方法?Windows 上的假设是 wchar_t 为 16 位。

4

2 回答 2

5

-fshort-wchar如果您想使用正确(32 位)的wchar_t. 它可行的情况非常有限,可能主要与独立实现/嵌入式的东西有关。

在移植您正在处理的 Windows 应用程序的情况下,我认为您应该只做一个替换来更改这些用途wchar_tWCHAR您可以自由定义)或char16_t(由 C11 定义,您可以提供您自己的 C11 之前的定义)。

于 2013-03-08T05:55:40.467 回答
2

如果我们使用 typedef uint16_t Char;

代码中的字符串文字呢?问题第三方保持不变。这些必须在通过之前转换为 wchar_t(UTF-32_。

于 2013-04-03T10:14:18.993 回答