在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位。
答案 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_。