std:: at_quick_exit
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Program termination | ||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||
| Unreachable control flow | ||||||||||||||||||||||||||||||||||||
|
(C++23)
|
||||||||||||||||||||||||||||||||||||
| Communicating with the environment | ||||||||||||||||||||||||||||||||||||
| Signals | ||||||||||||||||||||||||||||||||||||
| Signal types | ||||||||||||||||||||||||||||||||||||
| Non-local jumps | ||||||||||||||||||||||||||||||||||||
| Types | ||||||||||||||||||||||||||||||||||||
|
Definiert in Header
<cstdlib>
|
||
|
int
at_quick_exit
(
/*atexit-handler*/
*
func
)
noexcept
;
int at_quick_exit ( /*c-atexit-handler*/ * func ) noexcept ; |
(1) | (seit C++11) |
|
extern
"C++"
using
/*atexit-handler*/
=
void
(
)
;
extern "C" using /*c-atexit-handler*/ = void ( ) ; |
(2) | ( Nur zur Darstellung* ) |
Registriert die Funktion, auf die
func
zeigt, um sie beim schnellen Programmende (via
std::quick_exit
) aufzurufen.
Das Aufrufen der Funktion aus mehreren Threads verursacht keinen Datenwettlauf. Die Implementierung garantiert die Unterstützung der Registrierung von mindestens 32 Funktionen. Das genaue Limit ist implementierungsdefiniert.
Die registrierten Funktionen werden nicht bei normalem Programmende aufgerufen. Falls eine Funktion in diesem Fall aufgerufen werden muss, std::atexit verwendet werden.
Inhaltsverzeichnis |
Parameter
| func | - | Zeiger auf eine Funktion, die beim schnellen Programmabbruch aufgerufen wird |
Rückgabewert
0 wenn die Registrierung erfolgreich ist, andernfalls ein Wert ungleich Null.
Hinweise
Die beiden Überladungen sind unterschiedlich, weil die Typen des Parameters
func
unterschiedlich sind (
Sprachverknüpfung
ist Teil seines Typs).
Beispiel
#include <cstdlib> #include <iostream> void f1() { std::cout << "pushed first" << std::endl; // flush is intentional } extern "C" void f2() { std::cout << "pushed second\n"; } int main() { auto f3 = [] { std::cout << "pushed third\n"; }; std::at_quick_exit(f1); std::at_quick_exit(f2); std::at_quick_exit(f3); std::quick_exit(0); }
Ausgabe:
pushed third pushed second pushed first
Siehe auch
|
verursacht abnormale Programmbeendigung (ohne Bereinigung)
(Funktion) |
|
|
verursacht normale Programmbeendigung mit Bereinigung
(Funktion) |
|
|
registriert eine Funktion, die beim Aufruf von
std::exit()
aufgerufen werden soll
(Funktion) |
|
|
(C++11)
|
verursacht schnelle Programmbeendigung ohne vollständige Bereinigung
(Funktion) |
|
C-Dokumentation
für
at_quick_exit
|
|