_invalid_parameter, _invalid_parameter_noinfo, _invalid_parameter_noinfo_noreturn, _invoke_watson

C 运行时库使用这些函数来处理传递给 CRT 库函数的非有效参数。 代码也可能会使用这些函数来支持对非有效参数进行默认或自定义处理。

语法

extern "C" void __cdecl
_invalid_parameter(
    wchar_t const* const expression,
    wchar_t const* const function_name,
    wchar_t const* const file_name,
    unsigned int   const line_number,
    uintptr_t      const reserved);

extern "C" void __cdecl
_invalid_parameter_noinfo(void);

extern "C" __declspec(noreturn) void __cdecl
_invalid_parameter_noinfo_noreturn(void);

extern "C" __declspec(noreturn) void __cdecl
_invoke_watson(
    wchar_t const* const expression,
    wchar_t const* const function_name,
    wchar_t const* const file_name,
    unsigned int   const line_number,
    uintptr_t      const reserved);

参数

expression
一个表示源代码参数表达式无效的字符串。

function_name
调用该处理程序的函数名称。

file_name
在其中调用处理程序的源代码文件。

line_number
在其中调用处理程序的源代码中的行号。

reserved
未使用。

返回值

这些函数不返回值。 _invalid_parameter_noinfo_noreturn_invoke_watson 函数不会返回给调用方,在某些情况下,_invalid_parameter_invalid_parameter_noinfo 可能不会返回给调用方。

注解

C 运行时库函数传递非有效参数时,库函数会调用一个无效参数处理程序,该函数可由程序员指定执行多项操作。 例如,它可能会将问题报告给用户、写入日志、中断调试器、 终止程序,或不执行任何操作。 如果程序员未指定函数,则调用默认处理程序,_invoke_watson

默认情况下,在调试代码中识别出非有效参数时,CRT 库功能会使用 verbose 参数调用函数 _invalid_parameter。 在非调试代码中, _invalid_parameter_noinfo 函数会被调用,该函数使用空参数调用 _invalid_parameter 函数。 如果非调试 CRT 库功能要求程序终止,那么在调用 _invalid_parameter_noinfo_noreturn 函数时,该函数会使用空参数调用 _invalid_parameter 函数,然后调用 _invoke_watson 函数来强制终止程序。

_invalid_parameter 函数检查是否设置了用户定义的无效参数处理程序,如果已设置,则调用它。 例如,如果用户定义的线程本地处理程序是通过调用当前线程中的 set_thread_local_invalid_parameter_handler 来设置的,那么在调用时将返回该函数。 另外,如果用户定义的全局无效参数处理程序是置通过调用 set_invalid_parameter_handler 来设置的,那么在调用时将返回该函数。 否则将调用默认处理程序 _invoke_watson_invoke_watson 的默认行为是终止程序。 用户定义的处理程序可能会终止或返回。 我们建议用户定义的处理程序终止程序,除非确定认要进行恢复。

调用默认处理程序 _invoke_watson 时,如果处理器支持 __fastfail 操作,那么它将使用 FAST_FAIL_INVALID_ARG 参数进行调用并终止进程。 否则,将引发速快速失败异常,该异常可通过所连接的调试器捕获。 如果允许继续该进程,则会通过使用 STATUS_INVALID_CRUNTIME_PARAMETER 的异常代码状态调用 Windows TerminateProcess 函数使其终止。

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态

要求

函数 必需的标头
_invalid_parameter, _invalid_parameter_noinfo, _invalid_parameter_noinfo_noreturn, _invoke_watson <corecrt.h>

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

另请参阅

按字母顺序显示的函数参考
_get_invalid_parameter_handler_get_thread_local_invalid_parameter_handler
_set_invalid_parameter_handler_set_thread_local_invalid_parameter_handler
参数验证