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
|
|