_invalid_parameter, _invalid_parameter_noinfo, _invalid_parameter_noinfo_noreturn, _invoke_watson

Queste funzioni vengono usate dalla libreria di runtime C per gestire i parametri non validi passati alle funzioni della libreria CRT. Il codice può anche usare queste funzioni per supportare la gestione predefinita o personalizzabile dei parametri non validi.

Sintassi

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);

Parametri

expression
Stringa che rappresenta l'espressione di parametro del codice sorgente non valida.

function_name
Nome della funzione che ha chiamato il gestore.

file_name
File di codice sorgente in cui è stato chiamato il gestore.

line_number
Numero di riga nel codice sorgente in cui è stato chiamato il gestore.

reserved
Non utilizzato.

Valore restituito

Queste funzioni non restituiscono un valore. Le _invalid_parameter_noinfo_noreturn funzioni e _invoke_watson non tornano al chiamante e, in alcuni casi, _invalid_parameter e _invalid_parameter_noinfo potrebbero non tornare al chiamante.

Osservazioni:

Quando alle funzioni della libreria di runtime C vengono passati parametri non validi, la libreria di funzioni chiama un gestore di parametri non validi, ovvero una funzione che può essere specificata dal programmatore per eseguire varie operazioni. Ad esempio, segnalare il problema all'utente, scrivere in un log, attivare un debugger, terminare il programma o niente. Se il programmatore non specifica una funzione, viene chiamato un gestore predefinito, _invoke_watson.

Per impostazione predefinita, quando viene identificato un parametro non valido nel codice di debug, le funzioni della libreria CRT chiamano la funzione _invalid_parameter usando parametri dettagliati. Nel codice non di debug viene chiamata la funzione _invalid_parameter_noinfo, che chiama la funzione _invalid_parameter usando parametri vuoti. Se la funzione della libreria CRT non di debug richiede la terminazione del programma, viene chiamata la funzione _invalid_parameter_noinfo_noreturn, che chiama la funzione _invalid_parameter con parametri vuoti, quindi viene eseguita una chiamata della funzione _invoke_watson per forzare la terminazione del programma.

La funzione _invalid_parameter verifica se è stato impostato un gestore di parametri non validi definito dall'utente e, in caso affermativo, lo chiama. Ad esempio, se un gestore thread-local definito dall'utente è stato impostato da una chiamata a set_thread_local_invalid_parameter_handler nel thread corrente, viene chiamato, la funzione restituisce. In caso contrario, se un gestore di parametri non validi definito dall'utente è stato impostato da una chiamata a set_invalid_parameter_handler, viene chiamato , la funzione restituisce . Altrimenti viene chiamato il gestore predefinito _invoke_watson. Il comportamento predefinito di _invoke_watson prevede la terminazione del programma. I gestori definiti dall'utente possono terminare o restituire il controllo. È consigliabile che i gestori definiti dall'utente terminino il programma a meno che il ripristino non sia certo.

Quando viene chiamato il gestore _invoke_watson predefinito, se il processore supporta un'operazione __fastfail , viene richiamato usando un parametro di FAST_FAIL_INVALID_ARG e il processo termina. In caso contrario, viene generata un'eccezione di errore immediato, che può essere intercettata da un debugger collegato. Se il processo può continuare, viene terminato da una chiamata alla funzione di Windows TerminateProcess usando uno stato del codice eccezione di STATUS_INVALID_CRUNTIME_PARAMETER.

Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.

Requisiti

Funzione Intestazione obbligatoria
_invalid_parameter, _invalid_parameter_noinfo, _invalid_parameter_noinfo_noreturn, _invoke_watson <corecrt.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

Vedi anche

Informazioni di riferimento sulle funzioni alfabetiche
_get_invalid_parameter_handler, _get_thread_local_invalid_parameter_handler
_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler
Convalida dei parametri