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 Signalhandler abgefangen, der an std::signal übergeben wurde, und der Handler gibt nicht zurück.
Destruktoren von Variablen mit automatischen, Thread-lokalen(seit C++11) und statischen Speicherdauern werden nicht aufgerufen. Ebenso werden Funktionen, die mit std::atexit() und std::at_quick_exit(seit C++11) registriert wurden, nicht aufgerufen. Ob offene Ressourcen wie Dateien geschlossen werden, ist implementierungsabhängig. Ein implementierungsabhängiger Status, der eine fehlerhafte Ausführung anzeigt, wird an die Host-Umgebung zurückgegeben.
Inhalt |
[bearbeiten] Parameter
(keine)
[bearbeiten] Rückgabewert
Keiner, da die Funktion nicht zurückkehrt.
[bearbeiten] Ausnahmen
Wirft nichts.
[bearbeiten] Anmerkungen
POSIX schreibt vor, dass die Funktion abort() das Blockieren oder Ignorieren des Signals SIGABRT 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.
[bearbeiten] 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
[bearbeiten] Siehe auch
| verursacht normalen Programmabbruch mit Bereinigung (funktion) | |
| registriert eine Funktion, die bei Aufruf von std::exit() aufgerufen wird (funktion) | |
| (C++11) |
verursacht schnellen Programmabbruch ohne vollständige Bereinigung (funktion) |
| (C++11) |
registriert eine Funktion, die bei Aufruf von std::quick_exit aufgerufen wird (funktion) |
| setzt einen Signal-Handler für ein bestimmtes Signal (funktion) | |
| Funktion, die aufgerufen wird, wenn die Ausnahmebehandlung fehlschlägt (Funktion) | |
| C-Dokumentation für abort
| |