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