e467.c

構造体メンバ変数の初期化漏れ


コード例: struct S { int i1 ; int i2 ; int i3 ; } ; /* NULL 参照を防ぎ、メンバ変数を返却する */ int f(struct S *s) { assert( s != NULL ) ; return s->i3 ; } int main(void) { struct S s1 ; struct S s2 ; /* 未初期化メンバ変数が唯一の場合は */ /* 初期化のし忘れ確率が高い */ s1.i1 = 0 ; s1.i2 = 0 ; /* 警告します */ f(&s1) ; /* 未初期化メンバ変数が複数ある場合は */ /* 呼び出した関数で初期化を行う可能性が高い */ s2.i1 = 0 ; /* 警告しません */ f(&s2) ; return 0 ; }
解説: 構造体中のメンバ変数が1つだけ未初期化状態、 なおかつ、その構造体を関数の引数として使用した際に この警告を出力します。 複数の未初期化メンバ変数を持つ場合は 呼び出した関数の中で初期化することが多いため、 Review-C は警告しません。 コード例の f(&s2) ; ではバグを見逃すことになりますが、 これは制限事項となります。