まったくの余談ですが、 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.."