WindowsでMicrosoft Visual Studioを使用し、uBuntu LinuxでGCCを使用してC++クロスプラットフォームを開発しました。GCCでBOMソースファイルを使用してUTF-8をコンパイルすることはできますか?
は、Visual Studioで、私は私のコードで "²" "π" と同様にUnicodeの記号を使用することができます。 Visual Studioは、ソースファイルを常にBOM(Byte Order Mark)付きのUTF-8として保存します。例えば
:
// A = π.r²
double π = 3.14;
GCCは喜んで、私は最初のBOMを削除する場合にのみ、これらのファイルをコンパイルします。私は、BOMを削除しない場合は、私はこれらのようなエラーが発生します:質問に私をもたらします
wwga_hydutils.cpp:28:9: error: stray ‘\317’ in program
wwga_hydutils.cpp:28:9: error: stray ‘\200’ in program
:
GCCは、最初のBOMを削除せずにUTF-8のファイルをコンパイルするために取得する方法はあります?
私が使用しています:
- のWindows 7
- のVisual Studio 2010
と:
- のUbuntu oneiricの11.10
- GCC 4.6.1
編集(apt-getをインストールgccのによって提供される):最初のコメンターが指摘したように、私の問題は、BOMないた
しかし持ちます文字列定数の外側の非ASCII文字。 GCCはシンボル名にASCII以外の文字は好きではありませんが、GCCはBOMとUTF-8と完全に互換性があります。
gcc 4.4.5では、両方のUNICODE文字を含む文字列を使用して問題なく動作します。 BOM付きファイル。また、あなたが得るエラーはBOMとは関係ありませんが、問題のUNICODE文字が文字列の外にある(つまり、なぜそれらが_stray_と呼ばれているかのようです)。 –
@JoachimPileborgはいユニコード文字は文字列の外にあり、シンボル名として使用していた「π」は、「²」はコメントにすぎませんでした。 BOMを削除すると、コンソールの出力からエラーが取り除かれますが、GCCが実際にどのように文字を処理しているかはわかりません。 – Boinst
@ JoachimPileborg、私はユニコード文字を使用しているコンテキストを含めるように質問を更新しました。 – Boinst