На этом шаге мы рассмотрим возможности функций unexpected() и set_unexpected().
Функция void unexpected() вызывается, когда некоторая функция порождает исключение, отсутствующее в списке ее исключений. В свою очередь функция unexpected() по умолчанию вызывает функцию, зарегистрированную пользователем с помощью set_unexpected(). Если такая функция отсутствует, unexpected() вызывает terminate(). Функция unexpected() не возвращает значения, однако может сама порождать исключения.
Функция set_unexpected() позволяет установить функцию, определяющую реакцию программы на неизвестное исключение. Эти действия определяются в функции, которая ниже поименована как unexpected_func(). Указанная функция специфицируется как функция типа unexpected_function. Этот тип определен в файле except.h как указатель на функцию без параметров, не возвращающую значения:
typedef void (*unexpected_function)();
unexpected_function set_ unexpected(unexpected_function unexpected_func);
По умолчанию, неожиданное (неизвестное для функции) исключение вызывает функцию unexpected(), которая, в свою очередь вызывает либо unexpected_func() (если она определена), либо terminate() (в противном случае).
Функция set_unexpected() возвращает указатель на функцию, которая была установлена с помощью set_unexpected() ранее. Устанавливаемая функция (unexpected_func) обработки неизвестного исключения не должна возвращать управление вызвавшей ее функции unexpected(). Попытка возврата приведет к неопределенным результатам.
Кроме всего прочего, unexpected_func() может вызывать функции abort(), exit() и terminate().
На следующем шаге мы рассмотрим глобальные переменные, относящиеся к исключениям.