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 フラグのセットはありますか? それとも、一度書けばどこでもテストできるというのは現実なのでしょうか?