2011/10/15

[c/c++]NULLチェックの意味

昔から思うのだが、引数のNULLチェックというのは、作っている環境内で「エラーの時はNULLにする」とか「デフォルトはNULLで」とかいう決まりがない限り意味がないよなぁ。
グローバル変数は、だいたいの場合は初期値が0だから、未初期化だとNULLになりそうだから大丈夫だと思う。

でも、じゃあNULLってなんだよ、という気持ちになる。
32bitアドレス系だったとして、0x0000_0000はNGで、0x0000_0001はOKなのか?とか。
0x0000_0000って値は、誰かが代入しない限りはそうならないから、運用でそういうコーディングにしていないと意味がいない、とか。
そもそもdangling pointerには効果がないとかなんとかかんとかある。

なら、ポインタ変数は毎回初期値をNULLにすればいいじゃないか、という話もあろう。
でもさ・・・NULLにするってことは、NULL値を埋める処理が発生するってことやん。
NULLが0なら、そのメモリ分だけ0で埋めなくてはならないのだ。
その手間がもったいないよねぇ。

その辺をチェックする手間を省くために、静的解析ツールがあるのだけど、なんかうまく使ってくれないところがあるのだ。
いや、うまく使ってくれないというのは語弊がある。
コーディング規約などがあって、静的解析ツールのチェックがなるべく作動しないようになっているというべきか。
ツールを100%信用しないというのはいいと思うけど、うーん。。。。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。