まったくの余談ですが、 gcc の警告フラグの話題。

 FreeBSD では WARNS というマクロで警告レベルを定義すると、
それぞれ CFLAGS に以下のオプションを付けてコンパイルするように
なっています。(WARNS の仕組み自体は NetBSD 由来)

レベル1:
	-Werror
レベル2:
	-Wall -Wno-format-y2k -Wno-uninitialized を追加
レベル3:
	-W -Wstrict-prototypes -Wmissing-prototypes
	-Wpointer-arith -Wno-uninitialized を追加
レベル4:
	-Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch
	-Wshadow -Wcast-align を追加
レベル5:
	-Wuninitialized を追加
レベル6:
	-ansi -pedantic -Wbad-function-cast -Wchar-subscripts
	-Winline -Wnested-externs -Wredundant-decls を追加

(このレベル6までのフラグは bde / FreeBSD.org が提唱したので俗に
BDECFLAGS と呼ばれている)

 さらに、 printf() 系関数の引数チェックを行いたい場合には以下も
追加されます。(WFORMAT が定義されているとき)

GCC 2.95.x:
	-Wformat-nonliteral -Wformat-security -Wno-format-extra-args
GCC 3.0以降:
	-Wformat=2 -Wno-format-extra-args


 むろん、

- コードの性質上、警告の回避が不可能なことも多い
- コンパイラの警告が的外れな場合もある
- 警告はあくまでバグを発見する手助けであり、警告をすべてなくす
  ことが目的ではない

などを考慮し、本末転倒に陥らない程度に活用しています。

 たとえば、一度レベル3を達成したモジュールについては Makefile に
WARNS=3 と埋め込み、将来に渡って維持するよう頑張るといった具合。


 正直な話、 BSD のコードは Ruby とは違って汚いところがわんさか
あるので、 audit を含めてそういうことを持続的にやっていかないと
ダメなんだと思う..

-- 
                     /
                    /__  __            Akinori.org / MUSHA.org
                   / )  )  ) )  /     FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ /  ( (__(  @ iDaemons.org / and.or.jp

"When I leave I don't know what I'm hoping to find
              When I leave I don't know what I'm leaving behind.."