使用-fshort-wchar的含义

dop*_*ime 5 c c++ gcc clang wchar

在Mac OS X系统上浏览文件wchar.h时,我发现当未定义__cplusplust并且wchar_t的最大大小为2个字节时,使用编译器选项-fshort,wcscpy,wcscat等str函数的wchar_t等效. -Wchar).

对于C程序来说,如果定义了-fshort-wchar,它似乎不允许使用这些函数.我想知道使用-fshort-wchar时使用wchar_t函数的含义是什么?

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

在不同平台上处理wchar_t变化的好方法是什么?Windows上的假设是wchar_t是16位.

R..*_*R.. 5

-fshort-wchar如果您想使用正确的(32 位)定义与标准库或第三方库代码的任何部分交互,则wchar_t. 它可行的情况非常有限,可能主要与独立实施/嵌入的东西有关。

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