5

gcc のマニュアルによると、このオプション-fwide-exec-charsetは、コンパイル時にワイド文字列と文字定数のワイド文字セットを指定します。

mbtowc()しかし、実行時に呼び出してマルチバイト文字をワイド文字に変換するときのワイド文字セットとは何ですか? POSIX 標準は、マルチバイト文字の文字セットは現在のロケールの LC_CTYPE カテゴリによって決定されると述べていますが、ワイド文字セットについては何も述べていません。私は現在C標準を手元に持っていないので、C標準がこれについて何を言っているのかわかりません。

gcc オプションは、コンパイル時に-fwide-exec-charset使用するワイド文字セットを決定しますか?mbtowc()

4

1 に答える 1

5

簡単な答え:幅の広い文字列に使用される文字セットはwchar_t、コンパイル時に既知の特性によって決定されます。ライブラリ関数と同様mbtowcに、これはlibcがビルドされているときに発生します。

mbtowc外部文字セットにエンコードされた文字列から1文字を読み取り、wchar_t任意の文字を表すことができる値に書き込みます。同様にmbstowcs、外部でエンコードされたC文字列をの単純な配列に変換しwchar_tます。システムの観点からは、結果のワイド文字/文字列の「文字セット」を指定することは意味がありません。出力エンコーディングを変更すると、結果のワイド文字列をの配列として使用できなくなるためですwchar_t

ワイド文字がISO10646コードポイントに対応し、の幅に応じて、UCS-2またはUCS-4(より正確にはUTF-16またはUTF-32)などの固定幅Unicodeエンコーディングを生成すると説明 できます。プロセッサのの表現のエンディアンに応じて、リトルエンディアンまたはビッグエンディアンとして説明することもできます。ただし、これらはプラットフォームのプロパティであり、エンディアン、またはASCIIからEBCDICに変更できる以上に、実行時に変更することはできません。mbstowcswchar_twchar_t

-fwide-exec-charsetarray-of-の内部表現に対応する文字セットをコンパイラに明示的に指定するのに役立ちますwchar_t。これは、コンパイラーが通常生成する表現とは異なる場合に役立ちます(クロスコンパイルしているため、またはコンパイラーが誤って構成されているため)。これが、マニュアルが「に正確に適合しないエンコーディングで問題が発生する」と警告している理由ですwchar_t

于 2013-03-15T07:18:49.497 に答える