_set_invalid_parameter_handler
Define uma função a ser chamada quando o CRT detecta um argumento inválido.
_invalid_parameter_handler _set_invalid_parameter_handler(
_invalid_parameter_handler pNew
);
Parâmetros
- [entrada] pNew
O ponteiro de função para o novo manipulador inválido do parâmetro.
Valor de retorno
Um ponteiro para o manipulador inválido de parâmetro antes de chamar.
Comentários
Muitas funções de tempo de execução C verifica a validade dos argumentos passados a ele. Se um argumento inválido for passado, a função pode definir o número de erro de errno ou retornar um código de erro. Nesses casos, o manipulador inválido do parâmetro também é chamado. Esta função permite que o manipulador é definido como outra função. Uma função só pode ser especificada como o manipulador inválido do argumento de cada vez.
Quando a estrutura chama a função inválido do parâmetro, geralmente significa que um erro não recuperável aconteceu. A função inválido do parâmetro deve salvar todos os dados que possa e como nulo em. 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 inválido de manipulador de parâmetro deverá 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 do argumento. O segundo argumento é o nome da função de CRT que recebeu o argumento inválido. O terceiro argumento é o nome de arquivo na origem de CRT. O quarto argumento é a linha nesse arquivo. O último argumento é permitido. Todos os parâmetros têm o valor NULL a menos que uma versão de depuração da biblioteca de CRT é usada.
Requisitos
Rotina |
Cabeçalho necessário |
---|---|
_set_invalid_parameter_handler |
<stdlib.h> |
Para obter mais informações sobre compatibilidade, consulte Compatibilidade na Introdução.
Exemplo
No exemplo a seguir, um manipulador de erro inválido do parâmetro é usado para imprimir a função que recebeu o parâmetro inválido e o arquivo e a linha em fontes de CRT. Quando a biblioteca de CRT de depuração é usada, os erros inválidos de parâmetro também lança uma asserção, que está desabilitada neste exemplo que usa _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);
}