std::abort
Определён в заголовочном файле <cstdlib> | ||
|---|---|---|
void abort(); | (до C++11) | |
[[noreturn]] void abort() noexcept; | (начиная с C++11) |
Вызывает аварийное завершение программы, если только SIGABRT не обрабатывается обработчиком сигнала, переданным в std::signal, и этот обработчик не возвращает управление.
Деструкторы переменных с автоматической, локальной для потока(начиная с C++11) и статической длительностью хранения не вызываются. Функции, зарегистрированные с помощью std::atexit() и std::at_quick_exit(начиная с C++11), также не вызываются. Закрытие открытых ресурсов, например файлов, зависит от реализации. В среду выполнения возвращается определённый реализацией статус, указывающий на неудачное выполнение программы.
Возвращаемое значение
Отсутствует, поскольку функция не возвращает управление.
Исключения
Не выбрасывает исключений.
Примечания
POSIX устанавливает, что функция abort отменяет блокировку сигнала SIGABRT или его игнорирование.
Некоторые встроенные средства компилятора, например __builtin_trap (gcc, clang и icc) или __fastfail/__debugbreak (msvc), можно использовать для максимально быстрого завершения программы.
Пример
#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";
}
Вывод:
Tester ctor Tester ctor SIGABRT received
См. также
| вызывает нормальное завершение программы с очисткой ресурсов (функция) |
|
регистрирует функцию, вызываемую при вызове std::exit() (функция) |
|
|
(C++11) | вызывает быстрое завершение программы без полной очистки ресурсов (функция) |
|
(C++11) | регистрирует функцию, вызываемую при вызове std::quick_exit (функция) |
| устанавливает обработчик для указанного сигнала (функция) |
|
| функция, вызываемая при сбое обработки исключения (функция) |
|
Документация по C для abort |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/program/abort