使用-fshort-wchar的含义

时间:2013-03-08 04:12:48

标签: c++ c gcc clang wchar

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

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

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

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

2 个答案:

答案 0 :(得分:4)

如果要使用-fshort-wchar的正确(32位)定义与标准库或第三方库代码的任何部分进行交互,则

wchar_t不可用。它可行的情况非常有限,可能主要与独立实现/嵌入式东西有关。

在移植您正在处理的Windows应用程序的情况下,我认为您应该执行seatch-and-replace以将wchar_t的这些用途更改为WCHAR(您是可自由定义)或char16_t(由C11定义,您可以在C11之前提供自己的定义)。

答案 1 :(得分:2)

如果我们使用typedef uint16_t Char;

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