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) ; ではバグを見逃すことになりますが、
これは制限事項となります。