2013-03-08 43 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英寸前。