質問

Visual C ++プロジェクトをGCCに移植するとき、WCHAR_T Datatypeがデフォルトで4バイトのUTF-32であることがわかりました。コンパイラオプションでそれをオーバーライドできますが、RTLのWCS*(wcslen、wcscmpなど)全体は、4バイトの幅の文字列を想定しているため、使用できません。

今のところ、これらの機能の5-6をゼロから再実装し、実装を定義しました。しかし、よりエレガントなオプションはありますか?リンクされていますか?

私が追いかけているGCCの特定のフレーバーは、Mac OS X、Cygwin、およびDebian Linux Etchに付属しているXcodeです。

役に立ちましたか?

解決 4

より一般的なWCS*関数の5-6を再実装し、#defined My Implemantiations。

他のヒント

しかし、よりエレガントなオプションはありますか?たとえば、2バイトのwchar-tがどこかに静かに座って、リンクされるのを待っているGCC RTLのビルド?

いいえ。これは、GCCの問題ではなく、プラットフォーム固有の問題です。

つまり、LinuxプラットフォームABIはそれを指定します wchar_t 幅は32ビットなので、まったく新しいライブラリ(ICUが人気のある選択肢です)を使用するか、コードをポートして4バイトを処理する必要があります。 wchar_ts。リンクする可能性のあるすべてのライブラリも4バイトを想定しています wchar_t, 、 と 意思 GCCを使用している場合に壊します -fshort-wchar.

しかし、Linuxでは特に、ほぼ全員がすべてのマルチバイトエンコーディングのUTF-8に標準化されています。

を見てください ICUライブラリ. 。 UTF-16 APIを備えたポータブルライブラリです。

ご存知のように、WCHAR_Tは実装定義です。そのデータ型を使用して操作する方法はありません。

Linux Systemsは一般に、UCS-2の大失敗全体がそれほど偉大なアイデアであると宣言され、UTF-8をエンコードとして使用した後、後にUnicodeサポートを得るという利点がありました。すべてのシステムAPIは引き続きChar*で動作し、Unicode Safeです。

あなたの最善の策は、あなたのためにこれを管理するライブラリを使用することです:QT、ICUなど。

Cygwinは2バイトのWCHAR_Tを備えており、Windowsでメッシュ化しやすくなります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top