_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
未使用的。

傳回值

這些函式不會傳回值。 和 _invoke_watson_invalid_parameter_noinfo_noreturn 式不會傳回給呼叫端,在某些情況下, _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 的預設行為是終止程式。 使用者定義的處理常式可能會終止或傳回。 我們建議您,除非確定可復原,否則使用者定義的處理常式應終止程式。

呼叫預設處理常式時,如果處理器支援 __fastfail 作業,則會使用 的 FAST_FAIL_INVALID_ARG 參數叫用該處理常式 _invoke_watson ,而且進程會終止。 否則,就會引發快速失敗例外狀況,這可以附加的偵錯工具來攔截。 如果允許進程繼續,則會使用 的例外狀況代碼狀態 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
參數驗證