std::abort
| Definiert in 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 an std::signal übergebenen Signalhandler abgefangen 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 offene Ressourcen wie Dateien geschlossen werden, ist implementierungsdefiniert. Ein implementierungsdefinierter Status wird an die Host-Umgebung zurückgegeben, der eine fehlgeschlagene Ausführung anzeigt.
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) |
|
(C++11)
|
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) |
|
|
C-Dokumentation
für
abort
|
|