abort

Anula o processo atual e retorna um código de erro.

Observação

Não use esse método para desligar um aplicativo da Microsoft Store ou aplicativo UWP (Plataforma Universal do Windows), exceto em cenários de teste ou depuração. As formas programáticas ou de interface do usuário para fechar um aplicativo da Store não são permitidas de acordo com as políticas da Microsoft Store. Para obter mais informações, confira o Ciclo de vida do aplicativo UWP.

Sintaxe

void abort( void );

Valor retornado

abort não retorna o controle para o processo de chamada. Por padrão, ele verifica se há um manipulador de sinal de anulação e gera SIGABRT caso haja algum definido. Em seguida, abort termina o processo atual e retorna um código de saída ao processo pai.

Comentários

Seção específica da Microsoft

Por padrão, quando um aplicativo é compilado com a biblioteca de runtime de depuração, a rotina abort exibe uma mensagem de erro antes que SIGABRT seja gerado. Para aplicativos de console em execução no modo de console, a mensagem é enviada para STDERR. Aplicativos da área de trabalho do Windows e aplicativos de console em execução no modo de janela exibem a mensagem em uma caixa de mensagem. Para suprimir a mensagem, use _set_abort_behavior para limpar o sinalizador _WRITE_ABORT_MSG. A mensagem exibida depende da versão do ambiente de runtime usada. Para aplicativos compilados usando as versões mais recentes do Visual C++, a mensagem é semelhante a esta:

R6010 - abort() foi chamada

Nas versões anteriores da biblioteca de runtime C, esta mensagem era exibida:

Este aplicativo solicitou que o Runtime terminasse de maneira incomum. Entre em contato com equipe de suporte do aplicativo para obter mais informações.

Quando o programa é compilado no modo de depuração, a caixa de mensagem exibe opções para Anular, Tentar novamente ou Ignorar. Se o usuário escolher Anular, o programa será terminado imediatamente e retornará o código de saída 3. Se o usuário escolher Tentar novamente, um depurador será invocado para a depuração Just-In-Time, caso esteja disponível. Se o usuário escolher Ignorar, abort continuará o processamento normal.

Nas compilações de depuração e comerciais, abort verifica se um manipulador de sinal de anulação está definido. Se manipulador de sinal não padrão estiver definido, abort chamará raise(SIGABRT). Use a função signal para associar uma função de manipulador de sinal de anulação ao sinal SIGABRT. Você pode executar ações personalizadas – por exemplo, limpar recursos ou informações de log – e terminar o aplicativo com seu próprio código de erro na função de manipulador. Se nenhum manipulador personalizado de sinal está definido, abort não dispara o sinal SIGABRT.

Por padrão, em builds que não são de depuração de aplicativos desktop ou de console, abort invoca o mecanismo do Serviço de Relatório de Erros do Windows (anteriormente conhecido como Dr. Watson) para relatar falhas à Microsoft. Esse comportamento pode ser habilitado ou desabilitado chamando _set_abort_behavior e configurando ou mascarando o sinalizador _CALL_REPORTFAULT. Quando o sinalizador é definido, o Windows exibe uma caixa de mensagem que tem texto semelhante a "Um problema fez com que o programa parasse de funcionar corretamente". O usuário pode optar por invocar um depurador com um botão Depurar ou escolher o botão Fechar programa para encerrar o aplicativo com um código de erro definido pelo sistema operacional.

Se o manipulador de relatório de erros do Windows não for invocado, abort chamará _exit para terminar o processo com o código de saída 3 e retornará o controle ao processo pai ou ao sistema operacional. _exit não libera os buffers de fluxo nem executa o processamento de atexit/_onexit.

Por motivos de compatibilidade com o Windows, quando abort chamar _exit, ele poderá invocar a API do Windows ExitProcess, que, por sua vez, permitirá que as rotinas de término de DLL sejam executadas. Os destruidores não são executados no executável, mas o mesmo pode não ser verdadeiro para as DLLs carregadas no espaço de processo do executável. Esse comportamento não está estritamente em conformidade com o padrão C++. Para terminar imediatamente um processo, incluindo todas as DLLs, use a API do Windows TerminateProcess. Você também pode registrar um manipulador de sinal de anulação que invoca TerminateProcess para um comportamento em conformidade padrão. O comportamento em conformidade pode ter algum custo na compatibilidade com o Windows.

Para obter mais informações sobre a depuração de CRT, consulte Técnicas de depuração de CRT.

Fim da seção específica da Microsoft

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar isso, confira Estado global no CRT.

Requisitos

Rotina Cabeçalho necessário
abort <process.h> ou <stdlib.h>

Exemplo

O seguinte programa tenta abrir um arquivo e é anulado quando a tentativa falha.

// crt_abort.c
// compile with: /TC
// This program demonstrates the use of
// the abort function by attempting to open a file
// and aborts if the attempt fails.

#include  <stdio.h>
#include  <stdlib.h>

int main( void )
{
    FILE    *stream = NULL;
    errno_t err = 0;

    err = fopen_s(&stream, "NOSUCHF.ILE", "r" );
    if ((err != 0) || (stream == NULL))
    {
        perror( "File could not be opened" );
        abort();
    }
    else
    {
        fclose( stream );
    }
}
File could not be opened: No such file or directory

Confira também

Usando abort
abort função
Controle de processo e ambiente
_exec, _wexec funções
exit, _Exit, _exit
raise
signal
_spawn, _wspawn funções
_DEBUG
_set_abort_behavior