Namespaces
Variants

std:: abort

From cppreference.net
Utilities library
Definido en el encabezado <cstdlib>
void abort ( ) ;
(hasta C++11)
[ [ noreturn ] ] void abort ( ) noexcept ;
(desde C++11)

Causa la terminación anormal del programa a menos que SIGABRT esté siendo capturado por un manejador de señales pasado a std::signal y el manejador no retorne.

Los destructores de variables con duración de almacenamiento automático , thread local (since C++11) y estático storage durations no son llamados. Las funciones registradas con std::atexit() y std::at_quick_exit (since C++11) tampoco son llamadas. El cierre de recursos abiertos como archivos está definido por la implementación. Se retorna un estado definido por la implementación al entorno host que indica ejecución no exitosa.

Contenidos

Parámetros

(ninguno)

Valor de retorno

Ninguno porque no retorna.

Excepciones

No lanza nada.

Notas

POSIX especifica que la abort() función anula el bloqueo o la ignorancia de la señal SIGABRT .

Algunos intrínsecos del compilador, como __builtin_trap (gcc, clang, e icc) o __fastfail / __debugbreak (msvc), pueden utilizarse para terminar el programa lo más rápido posible.

Ejemplo

#include <csignal>
#include <cstdlib>
#include <iostream>
class Tester
{
public:
    Tester()  { std::cout << "Tester ctor\n"; }
    ~Tester() { std::cout << "Tester dtor\n"; }
};
Tester static_tester; // Destructor no llamado
void signal_handler(int signal) 
{
    if (signal == SIGABRT)
        std::cerr << "SIGABRT recibido\n";
    else
        std::cerr << "Señal inesperada " << signal << " recibida\n";
    std::_Exit(EXIT_FAILURE);
}
int main()
{
    Tester automatic_tester; // Destructor no llamado
    // Configurar manejador
    auto previous_handler = std::signal(SIGABRT, signal_handler);
    if (previous_handler == SIG_ERR)
    {
        std::cerr << "Configuración fallida\n";
        return EXIT_FAILURE;
    }
    std::abort(); // Generar SIGABRT
    std::cout << "Este código es inalcanzable\n";
}

Salida:

Tester ctor
Tester ctor
SIGABRT recibido

Véase también

provoca la terminación normal del programa con limpieza
(función)
registra una función para ser llamada al invocar std::exit()
(función)
(C++11)
provoca la terminación rápida del programa sin limpieza completa
(función)
registra una función para ser llamada al invocar std::quick_exit
(función)
establece un manejador de señal para una señal particular
(función)
función llamada cuando falla el manejo de excepciones
(función)