_invalid_parameter, _invalid_parameter_noinfo, _invalid_parameter_noinfo_noreturn, _invoke_watson

Estas funciones se usan en la biblioteca en tiempo de ejecución de C para controlar los parámetros no válidos que se han pasado a las funciones de la biblioteca CRT. El código también puede usar estas funciones para admitir el control predeterminado o personalizable de los parámetros no válidos.

Sintaxis

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

Parámetros

expression
Cadena que representa la expresión del parámetro de código fuente que no es válida.

function_name
El nombre de la función que llamó al controlador.

file_name
El archivo de código fuente donde se llamó al controlador.

line_number
El número de línea del código fuente donde se llamó al controlador.

reserved
Sin usar.

Valor devuelto

Estas funciones no devuelven un valor. Las funciones _invalid_parameter_noinfo_noreturn y _invoke_watson no vuelven al llamador y, en algunos casos, _invalid_parameter y _invalid_parameter_noinfo podrían no volver al llamador.

Comentarios

Cuando se pasan parámetros no válidos a las funciones de la biblioteca en tiempo de ejecución de C, las funciones de la biblioteca llaman a un controlador de parámetros no válidos, una función que el programador puede especificar para llevar a cabo numerosas operaciones. Por ejemplo, puede notificar el problema al usuario, escribir en un registro, interrumpir un depurador, finalizar el programa o no hacer nada. Si el programador no especifica ninguna función, se llama a un controlador predeterminado, _invoke_watson.

De forma predeterminada, cuando se identifica un parámetro no válido en el código de depuración, las funciones de la biblioteca CRT llaman a la función _invalid_parameter mediante parámetros detallados. En el código de no depuración, se llama a la función _invalid_parameter_noinfo, que a su vez llama a la función _invalid_parameter con parámetros vacíos. Si la función de biblioteca CRT de no depuración no requiere la finalización del programa, se llama a la función _invalid_parameter_noinfo_noreturn, que a su vez llama a la función _invalid_parameter con parámetros vacíos, seguido de una llamada a la función _invoke_watson para forzar la finalización del programa.

La función _invalid_parameter comprueba si se estableció un controlador de parámetro no válido definido por el usuario y, si es así, lo llama. Por ejemplo, si un controlador de subproceso local definido por el usuario se ha establecido mediante una llamada a set_thread_local_invalid_parameter_handler en el subproceso actual, se llama a este y luego se devuelve la función. En caso contrario, si un controlador global de parámetros no válidos definido por el usuario se ha establecido mediante una llamada a set_invalid_parameter_handler, se llama a este y se devuelve la función. De lo contrario, se llama al controlador predeterminado _invoke_watson. El comportamiento predeterminado de _invoke_watson consiste en finalizar el programa. Los controladores definidos por el usuario pueden finalizar o devolver. Se recomienda que los controladores definidos por el usuario finalicen el programa a menos que la recuperación sea segura.

Cuando se llama al controlador predeterminado _invoke_watson, si el procesador admite una operación __fastfail, se invoca con un parámetro de FAST_FAIL_INVALID_ARG y se finaliza el proceso. De lo contrario, se produce una excepción de error rápido, que se puede detectar con un depurador adjunto. Si el proceso puede continuar, finaliza mediante una llamada a la función TerminateProcess de Windows con el estado de código de excepción STATUS_INVALID_CRUNTIME_PARAMETER.

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

Requisitos

Función Encabezado necesario
_invalid_parameter, _invalid_parameter_noinfo, _invalid_parameter_noinfo_noreturn, _invoke_watson <corecrt.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Consulte también

Referencia de función alfabética
_get_invalid_parameter_handler, _get_thread_local_invalid_parameter_handler
_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler
Validación de parámetros