assert (CRT)
Avalia uma expressão e, quando o resultado é false, imprime uma mensagem de diagnóstico e anula o programa.
void assert(
int expression
);
Parâmetros
- expression
Expressão (inclusive ponteiros) que avalia como diferente de zero ou 0.
Comentários
A macro de assert normalmente é usado para identificar erros lógicos durante desenvolvimento de programas implementando o argumento de expression para avaliar a false apenas quando o programa está operando incorretamente. Depois de depuração estiver concluído, verifique da asserção pode ser desativado sem alterar o arquivo de origem definir o identificador NDEBUG. NDEBUG pode ser definido com uma opção de linha de comando de /D ou com uma política de #define . Se NDEBUG é definido com #define, a política deve aparecer antes que ASSERT.H foi incluída.
assert imprime uma mensagem de diagnóstico quando expression avalia a false (0) e chama anular para encerrar a execução do programa. Nenhuma ação é executada se expression é true (diferente de zero). A mensagem de diagnóstico inclui a expressão com falha, o nome do arquivo de origem e o número da linha onde a asserção falhou.
A mensagem de diagnóstico é impressa em caracteres amplos. Assim, funcionará conforme esperado mesmo que haja caracteres Unicode na expressão.
O destino da mensagem de diagnóstico depende do tipo de aplicativo que chamou a rotina. Os aplicativos do console sempre recebe a mensagem com stderr. Em um aplicativo baseado no Windows, assert chama a função de MessageBox do windows para criar uma caixa de mensagem para exibir a mensagem junto com um botão de OK . Quando o usuário clica em OK, o programa nulos imediatamente.
Quando o aplicativo é vinculado a uma versão de depuração das bibliotecas de tempo de execução, assert cria uma caixa de mensagem com os três botões: Anular, Repetir, e Ignorar. Se o usuário clicar em Anular, o programa nulos imediatamente. Se o usuário clicar em Repetir, o depurador é chamado e o usuário pode depurar o programa de (JIT) se a depuração just-in-time está habilitado. Se o usuário clicar em Ignorar, assert continua com sua execução regular: criando a caixa de mensagem com o botão de OK . Observe que clique Ignorar quando uma condição de erro existir pode resultar em um comportamento indefinido.
Para obter mais informações sobre depuração de CRT, consulte Técnicas de depuração do CRT.
A rotina de assert está disponível nas versões da versão e a depuração das bibliotecas de tempo de execução C. Outros dois macros da asserção, _ASSERT e _ASSERTE, também estão disponíveis, mas são avaliadas apenas as expressões transmitidas quando ele se o sinalizador de _DEBUG foi definido.
Requisitos
Rotina |
Cabeçalho necessário |
---|---|
assert |
<assert.h> |
Exemplo
Neste programa, a função de analyze_string usa a função de assert para testar várias condições relacionadas à cadeia de caracteres e o comprimento. Se qualquer uma das condições de falha, o programa imprime uma mensagem que indica ao que causou a falha.
// crt_assert.c
// compile with: /c
#include <stdio.h>
#include <assert.h>
#include <string.h>
void analyze_string( char *string ); // Prototype
int main( void )
{
char test1[] = "abc", *test2 = NULL, test3[] = "";
printf ( "Analyzing string '%s'\n", test1 ); fflush( stdout );
analyze_string( test1 );
printf ( "Analyzing string '%s'\n", test2 ); fflush( stdout );
analyze_string( test2 );
printf ( "Analyzing string '%s'\n", test3 ); fflush( stdout );
analyze_string( test3 );
}
// Tests a string to see if it is NULL,
// empty, or longer than 0 characters.
void analyze_string( char * string )
{
assert( string != NULL ); // Cannot be NULL
assert( *string != '\0' ); // Cannot be empty
assert( strlen( string ) > 2 ); // Length must exceed 2
}
Equivalência do .NET Framework
System::Diagnostics::Debug::Assert