GCCの下の2バイト(UCS-2)幅の幅
-
04-10-2019 - |
質問
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_t
s。リンクする可能性のあるすべてのライブラリも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でメッシュ化しやすくなります。