std:: abort
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Program termination | |||||||||||||||||||||
|
|||||||||||||||||||||
| Unreachable control flow | |||||||||||||||||||||
|
(C++23)
|
|||||||||||||||||||||
| Communicating with the environment | |||||||||||||||||||||
| Signals | |||||||||||||||||||||
| Signal types | |||||||||||||||||||||
| Non-local jumps | |||||||||||||||||||||
| Types | |||||||||||||||||||||
|
Definido en el encabezado
<cstdlib>
|
||
|
void
abort
(
)
;
|
(hasta C++11) | |
|
[
[
noreturn
]
]
void
abort
(
)
noexcept
;
|
(desde C++11) | |
Causa la terminación anormal del programa a menos que SIGABRT esté siendo capturado por un manejador de señales pasado a std::signal y el manejador no retorne.
Los destructores de variables con duración de almacenamiento automático , thread local (since C++11) y estático storage durations no son llamados. Las funciones registradas con std::atexit() y std::at_quick_exit (since C++11) tampoco son llamadas. El cierre de recursos abiertos como archivos está definido por la implementación. Se retorna un estado definido por la implementación al entorno host que indica ejecución no exitosa.
Contenidos |
Parámetros
(ninguno)
Valor de retorno
Ninguno porque no retorna.
Excepciones
No lanza nada.
Notas
POSIX especifica que la
abort()
función anula el bloqueo o la ignorancia de la señal
SIGABRT
.
Algunos intrínsecos del compilador, como
__builtin_trap
(gcc, clang, e icc) o
__fastfail
/
__debugbreak
(msvc), pueden utilizarse para terminar el programa lo más rápido posible.
Ejemplo
#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 no llamado void signal_handler(int signal) { if (signal == SIGABRT) std::cerr << "SIGABRT recibido\n"; else std::cerr << "Señal inesperada " << signal << " recibida\n"; std::_Exit(EXIT_FAILURE); } int main() { Tester automatic_tester; // Destructor no llamado // Configurar manejador auto previous_handler = std::signal(SIGABRT, signal_handler); if (previous_handler == SIG_ERR) { std::cerr << "Configuración fallida\n"; return EXIT_FAILURE; } std::abort(); // Generar SIGABRT std::cout << "Este código es inalcanzable\n"; }
Salida:
Tester ctor Tester ctor SIGABRT recibido
Véase también
|
provoca la terminación normal del programa con limpieza
(función) |
|
|
registra una función para ser llamada al invocar
std::exit()
(función) |
|
|
(C++11)
|
provoca la terminación rápida del programa sin limpieza completa
(función) |
|
(C++11)
|
registra una función para ser llamada al invocar
std::quick_exit
(función) |
|
establece un manejador de señal para una señal particular
(función) |
|
|
función llamada cuando falla el manejo de excepciones
(función) |
|
|
Documentación de C
para
abort
|
|