Namespaces
Variants

std:: abort

From cppreference.net
Utilities library
Definiert im Header <cstdlib>
void abort ( ) ;
(bis C++11)
[ [ noreturn ] ] void abort ( ) noexcept ;
(seit C++11)

Verursacht eine abnormale Programmbeendigung, es sei denn, SIGABRT wird von einem Signalhandler abgefangen, der an std::signal übergeben wurde, und der Handler kehrt nicht zurück.

Destruktoren von Variablen mit automatischer , thread-lokaler (seit C++11) und statischer Speicherdauer werden nicht aufgerufen. Funktionen, die mit std::atexit() und std::at_quick_exit (seit C++11) registriert wurden, werden ebenfalls nicht aufgerufen. Ob geöffnete Ressourcen wie Dateien geschlossen werden, ist implementierungsdefiniert. Ein implementierungsdefinierter Status wird an die Host-Umgebung zurückgegeben, der eine nicht erfolgreiche Ausführung anzeigt.

Inhaltsverzeichnis

Parameter

(keine)

Rückgabewert

Keine, da es nicht zurückkehrt.

Ausnahmen

Wirft nichts.

Hinweise

POSIX legt fest, dass die abort() -Funktion das Blockieren oder Ignorieren des SIGABRT -Signals außer Kraft setzt.

Einige Compiler-Intrinsics, z.B. __builtin_trap (gcc, clang, und icc) oder __fastfail / __debugbreak (msvc), können verwendet werden, um das Programm so schnell wie möglich zu beenden.

Beispiel

#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 not called
void signal_handler(int signal) 
{
    if (signal == SIGABRT)
        std::cerr << "SIGABRT received\n";
    else
        std::cerr << "Unexpected signal " << signal << " received\n";
    std::_Exit(EXIT_FAILURE);
}
int main()
{
    Tester automatic_tester; // Destructor not called
    // Setup handler
    auto previous_handler = std::signal(SIGABRT, signal_handler);
    if (previous_handler == SIG_ERR)
    {
        std::cerr << "Setup failed\n";
        return EXIT_FAILURE;
    }
    std::abort(); // Raise SIGABRT
    std::cout << "This code is unreachable\n";
}

Ausgabe:

Tester ctor
Tester ctor
SIGABRT received

Siehe auch

bewirkt normalen Programmabbruch mit Bereinigung
(Funktion)
registriert eine Funktion, die beim Aufruf von std::exit() aufgerufen wird
(Funktion)
(C++11)
bewirkt schnellen Programmabbruch ohne vollständige Bereinigung
(Funktion)
registriert eine Funktion, die beim Aufruf von std::quick_exit aufgerufen wird
(Funktion)
setzt einen Signalhandler für ein bestimmtes Signal
(Funktion)
Funktion, die bei Fehlschlagen der Ausnahmebehandlung aufgerufen wird
(Funktion)