Глава 22. Обработка исключительных ситуаций 595

h05951.jpg

Аргумент командной строки

На выходе

Флаг равен 0

Флаг < 0 или > 10 Флаг> 1 и < 10

Внутри DoSomethingUseful Флаг установлен в 0 Внутри DoSomethingElse

Внутри DoSomethingUseful Перехвачена исключительная ситуация (255)

Внутри DoSomethingUseful Флаг не равен нулю


В первом и втором случае флаг устанавливается в ноль; блок try вызывает DoSomethingUseful () и проверяет, находится ли значение флага в пределах допустимого диапазона. Так как значение попадает в допустимый диапазон, то следующий оператор if проверяет, равен ли флаг нулю. Так как флаг равен нулю, блок печатает сообщение и вызывает DoSomethingElse (). В этих случаях никакие исключительные ситуации не генерируются и программа выполняется нормально.

В третьем случае флаг больше 10 или меньше 0; блок try вызывает DoSomethingUseful (), а флаг не проходит проверку на попадание в допустимый диапазон. При этом генерируется исключительная ситуация (FLAG_OUT_OF_BOUNDS). Это целочисленная исключительная ситуация перехватывается обработчиком, который находится в функции main о следом за блоком try, и обработчик исправно печатает значение перехваченной исключительной ситуации.

В последнем случае флаг проходит проверку границ в DoSomethingUseful (), однако оператор if устанавливает, что он не равен нулю и генерирует строковую исключительную ситуацию. Эта строковая исключительная ситуация перехватывается обработчиком из функции DoSomethingUseful (), который просто печатает перехваченную строку.

В следующем разделе вы увидите, как компилятор Borland C++ определяет, когда какой обработчик необходимо вызвать. Как вы понимаете, если заранее не спланировать стратегию обработки исключительных ситуаций, ваша программа быстро начнет усложняться — а это именно то, чего вы хотите избежать.

Перехват исключительных ситуаций

Обработчики исключительных ситуаций чрезвычайно важны, поскольку именно они определяют дальнейший образ действий после перехвата исключительной ситуации. Надлежащее распределение обязанностей между обработчиками является важной частью разработки вашей программы.