e473.c

型違いループ内比較


原作: /* 1バイトの幅で数値を扱う */ typedef unsigned char BYTE ; void e473(void) { BYTE cnt ; BYTE buf[1024] ; /* 警告しない */ for(cnt = 0 ; cnt < 255 ; cnt++) { buf[cnt] = cnt ; } /* 警告する(永久ループ) */ for(cnt = 0 ; cnt < 256 ; cnt++) { buf[cnt] = cnt ; } }
修正例: typedef unsigned char BYTE ; void e473(void) { int cnt ; BYTE byCnt ; BYTE byBuf[1024] ; /* int 型のため、正しく判定できる */ for(cnt = 0, byCnt = 0 ; cnt < 256 ; cnt++, byCnt++) { byBuf[cnt] = byCnt ; } }
解説: 幅が1バイトの型は、unsigned で使用しても 256 以上の値を扱えません。 幅が小さい変数を定数(特に 256, 65536 などの区切り)と比較する際は、 十分に気を付けてください。