e456.c

符号無しの値と定数の比較(3)


コード例: int i = func1() ; unsigned int ui = func2() ; /* (ui - i) は unsigned int 型になるため、 */ /* 0 のときだけ偽となります */ if ( 0 < (ui - i) ) { do_something_except_only_one_time() ; }
解説: 符号無しの値と定数の比較(1)(2)と同種の問題です。 unsigned な型が 0 より大きくないケースはただ一つであり、 それは 0 > 0 となったときだけです。 多くの場合、これはバグではなく、コードを記述した人の想定通りですが、 初回に限っては注意しておくことをお勧めします。 参考: 『プログラミング言語C 第2版 カーニハン リッチー著/石田晴久訳』 pp241-2 「A6.5 算術変換」を参照してください。