1

ANSI C でコマンド ライン プログラムを作成して、Quake 2 マップ ファイルを解析し、使用されているエンティティとテクスチャの数を報告しています。私の開発マシンは MacBook です。OS X Snow Leopard (32 ビット)、Windows XP (32 ビット) と Vista (64 ビット)、および Ubuntu 9.10 (32 ビット) でテストしています。

コードは OS X と GCC 4.2 で完璧です。他のプラットフォームは、それほど完璧ではありません。

Visual Studio 2005 は、main() ブロックの途中での配列宣言について不平を言いました -- 配列のサイズ情報はそれまで利用できません -- それは一番上で宣言されるべきです。一番上にポインタを宣言し、配列を作成する関数を書くことで修正しました。

Windows 上の Dev-C++ および GCC (3.4) には不満はありません。

Windows 上の Cygwin と GCC (4.4) は、配列の添え字が char 型であることに不満を持っていました。それを修正するために (int) キャストを追加しました。

Ubuntu と GCC (4.4) は、fread の戻り値を無視することに文句を言っています。私はUbuntuがGCCをパッケージ化する方法のバグかもしれないと他の場所で読みましたが。私が fread を使用しているコンテキストでは、これは無視しても安全かもしれません。警告は -O3 フラグでのみ表示されます。

Visual Studio 2005 を除いて、私がテストしたすべてのコンパイラは GCC の特定のバージョンです。これらすべてのエラーと警告を追跡することは、お尻の深刻な痛みです。これまで、Makefile で次のフラグを使用していました。

デバッグ: -pedantic -Wall

リリース: -O3

主な開発マシンですべてのエラーをキャッチするために使用する GCC フラグのセットはありますか? それとも、一度書けばどこでもテストできるというのは現実なのでしょうか?

4

4 に答える 4

1

Lint のコピーを入手してください。Lint は静的解析ツールであり、ほぼすべてのコンパイラ エラーと警告をカバーし、さらにいくつかをカバーします。さまざまなプラットフォームやコンパイラを対象とするコードを頻繁に作成する人にとって、コードが Lint を確実に通過するようにすることは、コードをすべてのコンパイラで実行するための非常に優れたバロメーターです。

lint を近似するための gcc フラグの最適なセットは、次のようなものです。

-ansi -pedantic -W -Wall -Wundef -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wcast-qual -Wwrite-strings -Weffc++

私もよく利用します

-Wno-long-long
多くのコンパイラが long long は c++ 型ではないと不平を言うので、64 ビット コードを書くつもりなら。

*編集: コマンド ライン オプションのコピー アンド ペースト エラーを修正

于 2010-02-21T05:04:02.870 に答える
0

-Wall と Lint を使用すると、コードをよりよく理解するのに役立つため、時間を大幅に節約できます。コードを修正して、無視しても安全な警告を最小限に抑えます。再現が困難な実行時の障害に苦しむ可能性が低くなります。また、コードを保守する人は誰でも、変更を加えるのがより簡単になります。

Visual Studio を使用している場合は、Lint のようなツールのコンパイル オプションを調べてください。それらがどこにあるのか忘れてしまい、ビルドが遅くなりますが、役に立ちます。

于 2010-02-21T11:58:59.890 に答える
0

-ansiミックスに追加します。標準セットは-ansi -pedantic -Wall.

とは言っても、MSVC は別のコンパイラであり、独自の警告が表示されるため、MSVC にはおそらく他の癖が見られるでしょう。そのため、そのオプションも微調整する必要があるかもしれません。

于 2010-02-21T04:45:25.047 に答える