std:: abort
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Program termination | |||||||||||||||||||||
|
|||||||||||||||||||||
| Unreachable control flow | |||||||||||||||||||||
|
(C++23)
|
|||||||||||||||||||||
| Communicating with the environment | |||||||||||||||||||||
| Signals | |||||||||||||||||||||
| Signal types | |||||||||||||||||||||
| Non-local jumps | |||||||||||||||||||||
| Types | |||||||||||||||||||||
|
Défini dans l'en-tête
<cstdlib>
|
||
|
void
abort
(
)
;
|
(jusqu'à C++11) | |
|
[
[
noreturn
]
]
void
abort
(
)
noexcept
;
|
(depuis C++11) | |
Provoque la terminaison anormale du programme sauf si SIGABRT est intercepté par un gestionnaire de signal passé à std::signal et que le gestionnaire ne retourne pas.
Les destructeurs des variables ayant une durée de stockage automatique , locale au thread (depuis C++11) et statique storage durations ne sont pas appelés. Les fonctions enregistrées avec std::atexit() et std::at_quick_exit (depuis C++11) ne sont pas non plus appelées. La fermeture des ressources ouvertes telles que les fichiers est définie par l'implémentation. Un statut défini par l'implémentation est retourné à l'environnement hôte indiquant une exécution non réussie.
Table des matières |
Paramètres
(aucun)
Valeur de retour
Aucun car il ne retourne pas.
Exceptions
Ne lance rien.
Notes
POSIX spécifie que la fonction
abort()
contourne le blocage ou l'ignorage du signal
SIGABRT
.
Certaines intrinsèques de compilateur, par exemple
__builtin_trap
(gcc, clang, et icc) ou
__fastfail
/
__debugbreak
(msvc), peuvent être utilisées pour terminer le programme aussi rapidement que possible.
Exemple
#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"; }
Sortie :
Tester ctor Tester ctor SIGABRT received
Voir aussi
|
provoque la fin normale du programme avec nettoyage
(fonction) |
|
|
enregistre une fonction à appeler lors de l'invocation de
std::exit()
(fonction) |
|
|
(C++11)
|
provoque la fin rapide du programme sans nettoyage complet
(fonction) |
|
(C++11)
|
enregistre une fonction à appeler lors de l'invocation de
std::quick_exit
(fonction) |
|
définit un gestionnaire de signal pour un signal particulier
(fonction) |
|
|
fonction appelée lorsque la gestion des exceptions échoue
(fonction) |
|
|
Documentation C
pour
abort
|
|