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/w/cpp/utility/program/abort