Я слышал об обработке исключений на основе setjmp () или longjmp () в C, но я думаю, что нет никакого собственного способа сделать это.Что я обычно делаю, это просто проверяю, чтобы используемые типы были достаточно длинными, чтобы в них содержались все сложения / умножения, которые мне нужно сделать.
Весь смысл использования C, в отличие от управляемых языков, таких как C #,что вызовет OverflowException, это именно тот факт, что мощность процессора не теряется на проверки безопасности.C просто повернет счетчик и перейдет от FFFFFFFF к 00000000, так что вы можете проверить это (если a> b и тому подобное), но кроме этого я могу просто порекомендовать использовать более длинные типы.64 бита (длинные) должны отвечать всем вашим потребностям.
Переполнение не произойдет, когда вы печатаете число с помощью printf, или, по крайней мере, я не слышал о такой возможности.Для дополнений я бы просто использовал адекватные типы и сообщал компилятору, как интерпретировать значения, чтобы избежать ненужных приведений (например, литерал «123» будет интерпретироваться как 32-разрядный, но «123LL» будет 64-разрядным -То же самое, что и ".1f" против ".1").
Для индексов массива - вы всегда должны следить за тем, чтобы вы не читали / не записывали из вашего массива, так как C во многих случаях будет поврежденваши данные, не вызывая ошибки.
Что касается того, когда целочисленное переполнение должно быть проверено на ... Хорошо, когда это может произойти, и вы не хотите, чтобы это произошло:).