正確なは、(意図的に)左の実装が定義されています。
wchar_t
のコンセプトを最初に発明したとき、ISO 10646とUnicodeはまだ競合していました(しかし、現在はほとんど協力しています)。国際的なキャラクターが(あるいは多分何か他のものであっても)国際的なキャラクターになると主張するのではなく、彼らが選んだ国際キャラクターセットをサポートするためにインプリメンテーションが定義できるタイプ(そしていくつかの機能)を提供しただけです。
異なる実装はのバリエーションの可能性があります。たとえば、Windows上でMicrosoftのコンパイラを使用している場合、wchar_t
はUTF-16 Unicode(元々UCS-2 Unicodeを保持していましたが、現在は正式に廃止されています)を保持する16ビット型になります。
Linuxの場合、wchar_t
は、UCS-4/UTF-32でエンコードされたUnicodeを保持する32ビットタイプです。 gccと他の少なくともいくつかのオペレーティングシステムのポートは同じですが、常にそうであることを確認しようとはしませんでした。
ただし、その保証はありません。少なくとも論理的には、Linuxでの実装では16ビット、Windowsでは32ビット、64ビットであればどちらかを選択できます(現実には少し驚きます)。
いずれにしても、の目的はとなりますが、コードポイントを表現するにはwchar_t
で十分です。 I/Oの場合、データは外部表現(それが何であれ)wchar_t
に変換されることが意図されています(これにより、操作が比較的容易になります)。次に出力中に、それらは再びあなたの選択したエンコーディングに変換されます(これはあなたが読み込んだエンコーディングとはまったく異なる場合があります)。
ここから始めよう。 –
最初のパラメータは実際には 'wchar_t []'型で、 'wchar_t * 'と微妙に異なっている。 – dreamlax