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 などの区切り)と比較する際は、
十分に気を付けてください。