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) или __debugbreak (msvc) можно использовать для максимально быстрого завершения программы.
Пример
#include <csignal>
#include <iostream>
#include <cstdlib>
class Tester {
public:
Tester() { std::cout << "Tester конструктор\n"; }
~Tester() { std::cout << "Tester деструктор\n"; }
};
Tester static_tester; // Деструктор не вызывается
void signal_handler(int signal)
{
if (signal == SIGABRT) {
std::cerr << "Получен SIGABRT\n";
} else {
std::cerr << "Получен неожидаемый сигнал: " << signal << "\n";
}
std::_Exit(EXIT_FAILURE);
}
int main()
{
Tester automatic_tester; // Деструктор не вызывается
// Установка обработчика
auto previous_handler = std::signal(SIGABRT, signal_handler);
if (previous_handler == SIG_ERR) {
std::cerr << "Ошибка установки\n";
return EXIT_FAILURE;
}
std::abort(); // Вызов SIGABRT
std::cout << "Этот код недоступен\n";
}
Вывод:
Tester конструктор
Tester конструктор
Получен SIGABRT
Смотрите также
| вызывает нормальное завершение программы с очисткой (функция) | |
| регистрирует функцию, которая будет вызываться при вызове std::exit() (функция) | |
(C++11) |
вызывает быстрое завершение программы без полной очистки (функция) |
(C++11) |
регистрирует функцию, которая будет вызываться при вызове std::quick_exit (функция) |
| устанавливает обработчик для конкретного сигнала (функция) | |
| функция, вызываемая при сбое обработки исключения (функция) | |
Документация C по abort
| |