2013-03-08 255 views
3

的虽然经历Mac OS X系统上的文件wchar.h,我发现wchar_t的等效的STR功能,如wcscpy,当__cplusplust没有定义和wchar_t的的最大尺寸是wcscat中毒2个字节(通过使用编译器选项-fshort-wchar)。蕴涵使用-fshort-WCHAR

看来,对于C程序,它不允许如果-fshort-WCHAR被定义这样的功能使用。我想知道使用-fshort-wchar时使用wchar_t函数的含义是什么?

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

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

回答

5

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

在移植你在处理Windows应用程序的情况下,我想你应该只是做一个seatch和替换到wchar_t这些用途改变为WCHAR(这你可以自由定义)或char16_t(由C11定义,您可以在C11之前提供自己的定义)。

+0

我们已经通过typedef wchar_t的。所以,变化是不是一个问题,或者说应该是在Mac OS X使用字符?改变内容的编码,同时将其写入?文件或发送/ recieving – doptimusprime 2013-03-08 07:08:32

+0

@dbasic:你不准'typedef'它这样做会导致不确定的行为,这意味着我们无法预知会发生什么 – MSalters 2013-03-08 07:41:16

+0

通过typedef意味着我们的typedef使用wchar_t的字符;我们。直接使用char而不是wchar_t – doptimusprime 2013-03-08 08:15:00

2

如果我们用typedef uint16_t Char;

什么代码字符串文字?并且问题第三方保持不变。这些都转化为wchar_t的(通过UTF-32英寸前。