_invalid_parameter, _invalid_parameter_noinfo, _invalid_parameter_noinfo_noreturn, _invoke_watson

これらの関数は、CRT ライブラリ関数に渡された有効でないパラメーターを処理するために C ランタイム ライブラリによって使用されます。 有効でないパラメーターの既定の処理またはカスタマイズ可能な処理をサポートするために、自分のコードでこれらの関数を使用することもできます。

構文

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 ライブラリ関数により、詳細パラメーターを使用して _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 のパラメーターを使用して呼び出され、プロセスは終了します。 それ以外の場合、Fail Fast 例外が発生します。これは、アタッチされているデバッガーでキャッチできます。 プロセスが続行できる場合、STATUS_INVALID_CRUNTIME_PARAMETER の例外コード状態を使用して、Windows TerminateProcess 関数の呼び出しで終了します。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT のグローバル状態」を参照してください

必要条件

機能 必須ヘッダー
_invalid_parameter, _invalid_parameter_noinfo, _invalid_parameter_noinfo_noreturn, _invoke_watson <corecrt.h>

互換性の詳細については、「 Compatibility」を参照してください。

関連項目

アルファベット順関数リファレンス
_get_invalid_parameter_handler, _get_thread_local_invalid_parameter_handler
_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler
パラメーターの検証