◐ Shell
clean mode source ↗

std::abort — cppreference.com

Материал из cppreference.com

<tbody> </tbody> <tbody class="t-dcl-rev "> </tbody><tbody> </tbody>

Определено в заголовочном файле <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()
(функция) [править]
вызывает быстрое завершение программы без полной очистки
(функция) [править]
регистрирует функцию, которая будет вызываться при вызове std::quick_exit
(функция) [править]
устанавливает обработчик для конкретного сигнала
(функция) [править]
функция, вызываемая при сбое обработки исключения
(функция) [править]