Целочисленное переполнение в C: стандарты и компиляторы

Отредактировано, чтобы включить надлежащую стандартную ссылку благодаря Карлу Норуму.

Стандарт C утверждает

] Если во время вычисления выражения возникает исключительное условие (т. Е. если результат математически не определен или не находится в диапазоне представимых значений для его типа), поведение не определено.

Существуют ли переключатели компилятора, которые гарантируют определенное поведение при целочисленном переполнении? Я бы хотел избежать назальных демонов. В частности, я хотел бы заставить компилятор выполнять перенос при переполнении.

Ради уникальности, давайте возьмем стандарт C99, а компилятором - gcc. Но мне были бы интересны ответы для других компиляторов (icc, cl) и других стандартов (C1x, C89). Фактически, просто чтобы рассердить толпу C / C ++, я бы даже был признателен за ответы для C ++ 0x, C ++ 03 и C ++ 98.

Примечание. Международный стандарт ISO / IEC 10967-1 может быть актуально здесь, но, насколько я могу судить, это упоминалось только в информационном приложении.

28
задан Charles 9 September 2010 в 17:52
поделиться