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