std:: abort
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Program termination | |||||||||||||||||||||
|
|||||||||||||||||||||
| Unreachable control flow | |||||||||||||||||||||
|
(C++23)
|
|||||||||||||||||||||
| Communicating with the environment | |||||||||||||||||||||
| Signals | |||||||||||||||||||||
| Signal types | |||||||||||||||||||||
| Non-local jumps | |||||||||||||||||||||
| Types | |||||||||||||||||||||
|
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) |
|
(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
|
|