やっぱりコンパイラの警告レベルは高めに限る、基本的に

あるソフトを実装中にフラグが1つ増えることになった。フラグはenumで定義していた。

/* 諸事情によりダミーのソース */
typedef enum {
	HOGE_FOO,
	HOGE_BAR,
	HOGE_BAZ,            /* 新しく追加されたフラグ */
	HOGE_INVALID_STATUS
} HOGE_STATUS;

フラグの追加に合わせてソース中を何ヶ所か修正した後で、gccでチェック。

piyo.c:486: warning: enumeration value `HOGE_BAZ' not handled in switch

怒られた! 見事に修正漏れしてたので直した。

チェック用にわざと色々な警告を吐くようにオプションを追加しまくっていたお陰だと改めて実感。ありがとうgcc、ありがとう-Wswitch-enum、ありがとうgccMinGWの開発者の人。*1

ところで以前、Visual Studio上で普通に警告レベルを上げてビルドしたら、何かのSDK*2が大量の警告を出すのでイヤになったことがあった。自分が書いた部分のビルドログが埋もれちゃうんだもん。

*1:ちなみにデフォルトは「-Wall -ansi -pedantic」。これに更に20以上のオプションを付けている。

*2:たしかWindows Mobile 5.0 Pocket PC SDKだった気がするけど、定かではない。