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

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

Исключения бывают:

1. аппаратными – генерируются со стороны процессора и включают в себя обращение к невыделенной памяти, деление на 0, выход за грани разрядной сетки или массива;

2. программными – генерируются со стороны системы или каких-либо программ в случае их прямого инициирования. Обычно это происходит, когда аномальную ситуацию обнаруживает часть программы.

Задача структурной обработки заключается в однотипной работе с программными и аппаратными исключениями.

Подробнее о механизме обработки

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

С целью запустить обработку исключений пользователи "C++" используют такие выражения, как:

1. "try" – используется для включения одного или нескольких операторов, которые создают исключение;

2. "throw" – в качестве операнда во время передачи информации об ошибках используются объекты любого типа, что применимо только для программных исключений и является признаком того, что исключительные условия происходят в блоке "try";

3. "catch" – каждый из этих блоков указывает на тот тип исключения, который может быть обработан.

С целью обработки создаваемых исключений после блока "try" реализуют 1 или несколько блоков "catch". Непосредственно за блоком "try" находятся разделы кода под защитой. При этом выражение "throw" используют для вызова исключения. Блок кода, идущий за "catch" – обработчик исключения, он должен перехватывать исключение, когда имеется совместимость типов в "throw" и "catch". В случаях, когда со стороны оператора "catch" будет задано "…" – блок сможет обработать все исключения.

Так как любой из блоков "catch" обрабатывается по алгоритму, заданному программой, то обработчик с многоточием – последний обработчик для блока "try", который будет ему соответствовать. Зачастую блок "catch" используют с целями ведения журналов ошибок или для проведения очищения, предшествующего остановке выполнения программы.
try { … // защищенный раздел кода
  throw параметр;
}
catch (параметр) { // обработка исключения }
catch (…) { // обработка остальных исключений }

Пример, связанный с обработкой программных исключений, приведён ниже. Реальные программы требуют команды "throw" при посылке исключения, как правило, это следствие проверки каких-либо условий.
#include <iostream>
using namespace std;
int main() {
  try {
    cout << «Exception: «;
    throw 1;
    cout << «No exception!»;
  } catch (int a) {
    cout << a;
  }
cin.get(); return 0;
}

или
#include <iostream>
using namespace std;
int main() {
  try {
    cout << «Exception: «;
    //throw 1;
    cout << «No exception!»;
  } catch (int a) {
    cout << a;
  }
cin.get(); return 0;
}

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

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

Несколько слов об обработке структурного исключения

В данном случае приведён пример, связанный с исключительной ситуацией – делением на 0.
#include <iostream>
using namespace std;
int main() {
  int a = 0, b =10;
  cout << b/a << endl;cin.get();
  return 0;
}

Во время попыток запуска программы отмечается такая картина:
Обработка исключительных ситуаций

В целях обработки исключительной ситуации в блок защищенного кода необходимо поместить операцию деления.
#include <iostream>
using namespace std;
int main() {
  int a = 0, b = 10;
  try {
    cout << b / a << endl;
  }
  catch (…)
  {
    cout << «error»;
  }
  cin.get();
  return 0;
}

Корректный запуск программы предполагает осуществление настроек среды разработки с последующим разрешением обработки структурного исключения. Для этого выбираем Имя проекта – Свойства.
Обработка исключительных ситуаций

Далее для пункта меню "C/C++" выбираем Code Generation – Enable C++ Exceptions для установки значения "Yes With SEH Exceptions (/EHa)".
Обработка исключительных ситуаций

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

Компиляция с параметром "/EHa" может вызывать подключение к обрабатываемым исключениям структурированных исключений "C" и асинхронных исключений. Последние могут быть связаны с делением на 0 и числами, имеющими плавающую запятую.
Ключевые теги:
Понравилась новость? Добавь в закладки!
Хочешь получать свежие новости? Подпишись на обновления с сайта!
Рекомендуем посмотреть:

Добавление комментария

Ваше Имя:
Ваш E-Mail:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Вставка исходного кода Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера

Код:
Включите эту картинку для отображения кода безопасности
обновить, если не виден код
Введите код: