1

私の質問は、 Code::Blocks とその微調整バージョンの MinGW、および Notepad++ のコンテキストにあります。

UTF-8 を使用し、BOM を使用しない限り、ソースに Unicode リテラルを含めることができるようにしたいと考えています。

これはある程度までは問題なく動作しますが、ファイルを再度開くたびに BOM アウト (悪い駄洒落) になります。これには (当然のことながら) Unicode を ANSI 形式で表示するという神経質な副作用があります。:(

これらの非常に便利でありながら非常に煩わしい 3 バイトがそこにある必要があり、それからそれらを削除する必要があります。(コンパイル時)。

ソースファイルを前処理し、最初の 3 バイトを破棄するだけです (UTF-8 BOM の場合)...

コンパイルするたびに (手動で削除することによって) プロセッサになるつもりはないので、これらのリテラルには BOM なしの #include ファイルを使用することにしましたが、これはいくつかの観点から問題があります。それはことわざの苦痛であり、私はそれらを「見る」ことができないということです! ..多くのジャグリングなしで。

カスタム プリプロセッサを使用してツールチェーンを利用する方法はありますか? ...または、明らかな解決策を見逃している場合は、それについて聞いていただければ幸いです。

4

2 に答える 2

1

とにかく、すべての文字列リテラルを別のファイルに外部化し、loadLit()関数 (または同様の) を使用して実行時にそれらを取得することを検討することをお勧めします。

これにより、すべての文字列リテラルを含む単一のファイル (BOM を含む) を持つことができ、アプリケーションを国際化する必要がある場合に、作業がずっと楽になります。

私たちはこれを行っていますが、クラス 1 プログラムは 21 の異なるロケールに対応するように i18n する必要があるため、このようにすることで多くの作業を節約できることを覚えておいてください :-) 走行距離は異なる場合があります。

于 2010-08-04T03:29:04.273 に答える
0

私はもう少しいじくり回しました、そして私は暫定的な解決策を考え出しました。私は実際にパイプソリューションを探していたのに対し、ソースの変更を伴うため、完全には満足していませんが、g ++。exeはコマンドライン引数のみを受け入れるようです(間違っている場合は修正してください)。

私の「解決策」は少しラフで準備ができていますが、機能し、私が遭遇した他の実行可能な解決策よりも確かに優れています(これはありません!)編集者に十分な注意を払う必要があります「ファイルは外部から変更されました」というメッセージボックス(ファイルが編集中の場合)ですが、実際にはBOMはまだエディター内にあるため、多少の論点になります。

これは単純なコマンドラインハックです。私はより統合されたオプションを好みますが、これがこれです(そしてそれは機能します):

コードブロックで、[設定]->[コンパイラとデバッガ]->[その他の設定]->[詳細オプション]->[コマンドラインマクロ]に移動します。

これらのmodをコマンドラインに追加します。それらはすべて(もちろん)1行になっているはずですが、わかりやすくするために、次のように分けています。

cmd /c DropTheBOM.exe $file
& $compiler $options $includes -c $file -o $object // (use your compiler cmdline)
& MakeTheBOM.exe $file
// Write your own utils, or try here: http://code.google.com/p/utf-bom-utils/

PS:#includeファイルはBOMが削除されません(存在する場合)。これらのファイルを#includeするルーチンの単純なBOM y / n argスイッチは、この問題を非常に簡単に解決します...(ただし、これはWindowsの問題...多分それが対応されていない理由です...またはそれを持っていますか?誰か知っていますか?

于 2010-06-27T15:28:15.430 に答える