Поделиться через


set_unexpected (CRT)

Устанавливает собственную функцию завершения, которая будет вызываться unexpected.

Синтаксис

unexpected_function set_unexpected( unexpected_function unexpFunction );

Параметры

unexpFunction
Указатель на пользовательскую функцию, которая заменит функцию unexpected.

Возвращаемое значение

Возвращает указатель на предыдущую функцию завершения, зарегистрированную с помощью _set_unexpected, чтобы предыдущую функцию можно было впоследствии восстановить. Если предыдущая функция не задана, возвращаемое значение может использоваться для восстановления поведения по умолчанию; это значение может быть NULL.

Замечания

Функция set_unexpected устанавливает unexpFunction как функцию, вызываемую функцией unexpected. unexpected не используется в текущей реализации обработки исключений C++. Тип unexpected_function определен в файле EH.H как указатель на определенную пользователем непредвиденную функцию, unexpFunction, возвращающую значение void. Пользовательская unexpFunction функция не должна возвращаться вызывающей функции.

typedef void ( *unexpected_function )( );

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

В отличие от пользовательской функции завершения, установленной с помощью вызова set_terminate, исключение может быть вызвано из функции unexpFunction.

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

В текущей реализации обработчика исключений C++ Майкрософт unexpected вызывает terminate по умолчанию и никогда не вызывается из библиотеки времени выполнения для обработки исключений. Нет особых преимуществ для вызова unexpected , а не terminate.

Существует один set_unexpected обработчик для всех динамически связанных библиотек DLL или EXEs, даже если вы вызываете set_unexpected обработчик, может быть заменен другим или заменить обработчик, заданный другой библиотекой DLL или EXE.

Требования

Маршрут Обязательный заголовок
set_unexpected <eh.h>

Дополнительные сведения о совместимости см. в разделе Совместимость.

См. также

Процедуры обработки исключений
abort
_get_unexpected
set_terminate
terminate
unexpected