_set_invalid_parameter_handler
Define uma função a ser chamada quando a CRT detecta um argumento inválido.
_invalid_parameter_handler _set_invalid_parameter_handler(
_invalid_parameter_handler pNew
);
Parâmetros
- [in]pNew
O ponteiro de função para o novo manipulador de parâmetro inválido.
Valor de retorno
Um ponteiro para o manipulador de parâmetro inválido antes da chamada.
Comentários
Muitas funções de tempo de execução c verificam a validade de argumentos transmitidos a eles.Se um argumento inválido for passado, a função pode definir o errno o número de erro ou um código de erro de retorno.Em tais casos, também é chamado o manipulador de parâmetro inválido.Essa função permite que esse manipulador a ser definida para outra função.Apenas uma função pode ser especificada como o manipulador de argumento inválido ao mesmo tempo.
Quando a estrutura chama a função de parâmetro inválido, isso normalmente significa que ocorreu um erro não recuperável.Salve qualquer dado possa e, em seguida, anular a função de parâmetro inválido.Ele não deve retornar o controle para a função principal, a menos que você tenha certeza de que o erro é recuperável.
A função de manipulador de parâmetro inválido deve ter o seguinte protótipo:
void _invalid_parameter(
const wchar_t * expression,
const wchar_t * function,
const wchar_t * file,
unsigned int line,
uintptr_t pReserved
);
O primeiro argumento é a expressão de argumento.O segundo argumento é o nome da função CRT que recebeu o argumento inválido.O terceiro argumento é o nome de arquivo na origem do CRT.O quarto argumento é a linha nesse arquivo.O último argumento é reservado.Todos os parâmetros têm o valor NULL , a menos que uma versão de depuração da biblioteca CRT é usada.
Requisitos
Rotina |
Cabeçalho necessário |
---|---|
_set_invalid_parameter_handler |
<stdlib.h> |
Para obter mais informações de compatibilidade, consulte Compatibilidade na introdução.
Exemplo
No exemplo a seguir, um manipulador de erro de parâmetro inválido é usado para imprimir a função que recebeu o parâmetro inválido e o arquivo e a linha nas fontes do CRT.Quando a biblioteca de depuração CRT é usada, erros de parâmetro inválido também lançará uma asserção, que é desativada neste exemplo, usando CrtSetReportMode.
// crt_set_invalid_parameter_handler.c
// compile with: /Zi /MTd
#include <stdio.h>
#include <stdlib.h>
#include <crtdbg.h> // For _CrtSetReportMode
void myInvalidParameterHandler(const wchar_t* expression,
const wchar_t* function,
const wchar_t* file,
unsigned int line,
uintptr_t pReserved)
{
wprintf(L"Invalid parameter detected in function %s."
L" File: %s Line: %d\n", function, file, line);
wprintf(L"Expression: %s\n", expression);
abort();
}
int main( )
{
char* formatString;
_invalid_parameter_handler oldHandler, newHandler;
newHandler = myInvalidParameterHandler;
oldHandler = _set_invalid_parameter_handler(newHandler);
// Disable the message box for assertions.
_CrtSetReportMode(_CRT_ASSERT, 0);
// Call printf_s with invalid parameters.
formatString = NULL;
printf(formatString);
}