for (i = 0; i <= N; ++i) { ... }
N が の場合、この特定のステートメントは無限ループを引き起こしますINT_MAX
。符号なしオーバーフローがオーバーフローをラップしていることを知っていれば、コンパイラは符号なしと仮定i
して、オーバーフローで が定義されていない場合N
、ループが正確に繰り返されると想定できます。ここで注意すべきことは、次のようにループを作成すると、N+1
i
for (i = 0; i < N; ++i) { ... }
これはまだ未定義の動作になりますか?
符号付き整数の場合、 がINT_MAX + 1
確実に等しくないのはなぜですか?INT_MIN