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
|