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値は環境によって変わりますのでエラーです)
解説:
構造体のメンバ変数が正しく初期化されていません。
使用する場合には必ず初期化をしましょう。
ただし共用体の場合は、明示的に代入されていなくとも
アルゴリズムとして正しいことがあります。(今回の例)