Обработка исключительных ситуаций в С — это процесс, который пригодится каждому программисту на этом языке.
Обработка исключений в С и С++
Обработка исключительных ситуаций в С применяет 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.
Заключение
Обработка исключений в С — это несложная операция. Чтобы начать ее применять, нужно запомнить 3 основные вещи:
Когда используется оператор throw, то обработка исключений начинается в тот же момент с ближайшего блока try, даже если он находится выше по стеку. Если в этом try есть инструкция catch для обработки данного исключения, то точка входа программы перейдет в данный обработчик. А само вброшенное исключение будет считаться обработанным.
Если в ближайшем try не будет нужных обработчиков catch для вброшенного исключения, то программа начнет выполняться со следующего try. И так до тех пор, пока не будет найден нужный catch и не определится точка входа программы.
Тип исключения и тип обработчика должны совпадать. К примеру, если ошибка типа float, то она не обработается catch типом int, а если исключение типа int — никогда не обработается catch типом char и т. д.
Другое