set_unexpected (CRT)

安装要由 unexpected 调用的自身的终止函数。

语法

unexpected_function set_unexpected( unexpected_function unexpFunction );

参数

unexpFunction
指向为替换 unexpected 函数而编写的函数的指针。

返回值

返回指向由 _set_unexpected 注册的上一个终止函数的指针,以便稍后能还原上一个函数。 如果之前尚未设置函数,则返回值可用于还原默认行为;此值可能为 NULL

注解

set_unexpected 函数安装 unexpFunction 作为由 unexpected 调用的函数。 不会在当前 C++ 异常处理实现中使用 unexpected。 在 EH.H 中将 unexpected_function 类型定义为指向用户定义的意外函数的指针,则 unexpFunction 返回 void。 自定义的 unexpFunction 函数不应返回到其调用方。

typedef void ( *unexpected_function )( );

默认情况下,unexpected 调用 terminate。 你可以通过以下方式更改此默认行为:编写自己的终止函数并调用 set_unexpected(将该函数的名称作为其参数)。 unexpected 调用作为 set_unexpected 的参数提供的最后一个函数。

与通过对 set_terminate 的调用所安装的自定义终止函数不同,可能会从 unexpFunction 中引发异常。

在多线程环境中,单独为每个线程维护意外函数。 每个新线程都需要安装它自己的意外函数。 因此,每个线程都负责它自己的意外处理。

在当前 C++ 异常处理的 Microsoft 实现中,unexpected 默认调用 terminate,且始终不由异常处理运行时库进行调用。 调用 unexpected 而不是 terminate 并没有特别的优势。

存在适用于所有动态链接的 DLL 或 EXE 的单个 set_unexpected 处理程序;即使你调用 set_unexpected,你的处理程序也可能会替换为另一个处理程序,或者你也要使用另一个 DLL 或 EXE 替换处理程序集。

要求

例程 必需的标头
set_unexpected <eh.h>

有关兼容性的详细信息,请参阅 兼容性

另请参阅

异常处理例程
abort
_get_unexpected
set_terminate
terminate
unexpected