_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 telefonar.
Comentários
Muitas funções de time de execução C verifica a validade dos argumentos passados a eles.Se um argumento inválido for passado, a função pode conjunto o errno número do 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 seja definida como outra função.Apenas uma função pode ser especificada sistema autônomo o manipulador de argumento inválido ao mesmo time.
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 é nome de arquivo na fonte do CRT.O quarto argumento é a linha nesse arquivo.O último argumento está reservado.Os parâmetros todos têm o valor NULL a menos que seja usada uma versão de depurar da biblioteca CRT.
Requisitos
Rotina |
Cabeçalho necessário |
---|---|
_set_invalid_parameter_handler |
<stdlib.h> |
Para obter mais informações de compatibilidade, consulte Compatibility na introdução.
Exemplo
No exemplo a seguir uma rotina de tratamento de erros de parâmetro inválido é usada para imprimir a função que recebeu o parâmetro inválido e o arquivo e a linha em fontes de CRT.Quando é usada da biblioteca CRT de depurar, erros de parâmetro inválido também lançam uma declaração, que é desabilitado 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);
}
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);
}
Invalid parameter detected in function printf. File: printf.c Line: 54 Expression: (format != NULL)