e4186.c

符号無しの値と0を比較しています

警告:   B:e4186: unsigned 変数を 0 と比較しています


原作: int i = 50 ; unsigned int ui = 8 ; if ( (ui - i) < 0 ) { /* (ui - i) は unsigned int 型になるため、 */ /* ここは絶対に実行されません */ never_do_something() ; }
修正例: /* 型を揃えるのが一番です */ int i = 50 ; int i2 = 8 ; if ( i2 < i ) { do_something() ; }
解説: unsignedの型の値が0未満になる事は無いため、 比較は意味が無いか間違っています。 参考: 『プログラミング言語C 第2版 カーニハン リッチー著/石田晴久訳』 pp241-2 「A6.5 算術変換」を参照してください。