e403.c

構造体のメンバ変数、初期化ミス


コード例: #include <stdio.h> /* サイズが4バイトの共用体 */ union utag { unsigned int val ; struct stag { unsigned char c1,c2,c3,c4 ; } s ; } ; /* 構造体 */ struct stag2 { int i ; char *cp ; } ; int main(void) { union utag u ; struct stag2 s ; u.s.c1 = u.s.c2 = u.s.c3 = u.s.c4 = 1 ; /* 明示的に初期化されていない二つの値にエラーメッセージ */ printf("u.val=%u s.i=%d¥n", u.val, s.i) ; return 0 ; }
実行結果: u.val=16843009 s.i=2293488 (16843009 は 0x01010101 と同じです。  s.i値は環境によって変わりますのでエラーです)
解説: 構造体のメンバ変数が正しく初期化されていません。 使用する場合には必ず初期化をしましょう。 ただし共用体の場合は、明示的に代入されていなくとも アルゴリズムとして正しいことがあります。(今回の例)