Обработка исключений в С и С++ схожа. Основной ее посыл — это вызывать
функцию для обработки ошибок, когда ошибки будут обнаружены в программе. Это
очень сильно автоматизирует процесс обработки ошибок, а значит и ускоряет саму
разработку программы. Ведь раньше все это приходилось делать «руками», а теперь
процесс поиска и решения ошибок взяла на себя обработка исключений.
Обработка исключительных ситуация в С — это процесс, который пригодиться
каждому программисту на этом языке.
Обработка исключений в С и С++
Обработка исключительных ситуаций в С применяет 3 основных и важных слова:
- try — блок, в коде которого, будут искаться ошибки;
- catch — блок, который знает что делать с найденными ошибками;
- throw — оператор, который принудительно вбрасывает ошибку в программу, для возбуждения работоспособности try и catch и генерации точки входа обработки исключений.
Обработка исключений в С имеет довольно простой принцип:
Код, в которым мы ожидаем появление ошибок (они же исключения!),
помещается в блок try. Когда в этом блоке обнаруживается исключение
(ошибка), то оно перехватывается подходящей инструкцией catch и
обрабатывается.
Блоки try и catch генерируются по следующей форме:
try {
//код-инструкция, который нужно обработать на исключения
catch ( описание типа и аргумента) {
//инструкция блока catch }
catch ( описание типа и аргумента) {
//инструкция блока catch }
}
Блок try может быть разных размеров. Он может содержать в себе лишь часть какой-
нибудь функции, которую нужно проверить на ошибки, а может содержать весь блок
main(), то есть охватить обработку исключений всей программы.
Когда в try будет найдена какая-то ошибка, она будет перехвачена блоком catch,
который обладает соответствующей инструкцией. То есть, для одного try может быть
написано множество catch для обработки разных типов исключений. Один catch =
один тип исключений(ошибок). Соответственно catch исполняется, только когда его
инструкции соответствуют найденной ошибке в try. А если в блоке try не будут
найдены никакие исключения, то никакой catch выполняться не будет.
Бывает такое, что в программе находятся ошибки, для которых нет инструкций catch.
В этом случае программа может завершиться в аварийном режиме.
Когда найденная ошибка в блоке try передается соответствующей инструкции catch –
при этом вся программа приостанавливает свою работу и ждет завершения работы
блока catch. Ошибка, прошедшая catch считается обработанной, и после окончания
работы этого блока возобновляется работа всей обрабатываемой программы.
Обработка исключений в С: блок catch
С блоком try все ясно — там может быть любой объем кода, который нужно
проверить на исключения. Но что может быть в блоке catch? В принципе там можно
написать любую нужную инструкцию или же вообще блок можно оставить пустым. Но
чаще всего эти блоки выполнют три основные вещи:
- Выводят сообщение о исключениях в Консоль или лог-документ.
- Возвращают значение и код ошибки обратно в cаller.
- Генерируют другое исключение для отправки его в другой блок try.
Возможно вам будет интересно почитать статью “Контейнеры Flex”
Заключение
Обработка исключений в С — это не сложная операция. Чтобы ее начать применять,
исключительных ситуаций 3 основные вещи:
- Когда используется оператор throw, то обработка исключений начинается в тот
же момент с ближайшего блока try, даже если он находится выше по стеку.
Если в этом try есть инструкция catch, для обработки данного исключения, то
точка входа программы перейдет в данный обработчик. А само вброшенное
исключение будет считаться обработанным. - Если в ближайшем try не будет нужных обработчиков catch, для вброшенного
исключения, то программа начнет выполняться со следующего try. И так, пока
не будет найден нужный catch и не определится точка входа программы. - Тип исключения и тип обработчика должны совпадать. К примеру, если ошибка
типа float, то она не обработается catch типом int, а если исключение типа int
никогда не обработается catch типом char и т.д.