6

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 を使用する必要があるのか​​疑問に思われるかもしれません。wchar_t のサイズが 2 バイトである Windows 用に最初に作成されたアプリケーションを移植しているためです。また、wchar_t 文字列に保持されているデータはファイルに書き込まれ、2 つのアプリケーション間で交換されます。

異なるプラットフォームでの wchar_t の変動性を処理する良い方法は何ですか? Windows での前提は、wchar_t が 16 ビットであることです。

4

2 に答える 2

5

-fshort-wcharの正しい (32 ビット) 定義を使用して、標準ライブラリまたはサードパーティ ライブラリ コードの一部と対話する場合、 は使用できませんwchar_t。実行可能な状況は非常に限られており、おそらく主に独立した実装/組み込みのものに関係しています。

wchar_t扱っている Windows アプリケーションを移植する場合は、これらの使用をWCHAR(自由に定義できる) またはchar16_t(C11 で定義されている)に変更するには、単に置換を実行する必要があると思います。 C11 より前の独自の定義を提供します)。

于 2013-03-08T05:55:40.467 に答える