Namespaces
Variants

std:: abort

From cppreference.net
Utilities library
Определено в заголовочном файле <cstdlib>
void abort ( ) ;
(до C++11)
[ [ noreturn ] ] void abort ( ) noexcept ;
(начиная с C++11)

Вызывает аварийное завершение программы, если только SIGABRT не перехватывается обработчиком сигнала, переданным в std::signal и обработчик не возвращает управление.

Деструкторы переменных с автоматической , thread local (since C++11) и статической storage durations не вызываются. Функции, зарегистрированные с помощью std::atexit() и std::at_quick_exit (since 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; // Деструктор не вызывается
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 ctor
Tester ctor
SIGABRT received

Смотрите также

вызывает нормальное завершение программы с очисткой ресурсов
(функция)
регистрирует функцию для вызова при std::exit() вызове
(функция)
(C++11)
вызывает быстрое завершение программы без полной очистки ресурсов
(функция)
регистрирует функцию для вызова при std::quick_exit вызове
(функция)
устанавливает обработчик сигнала для конкретного сигнала
(функция)
функция, вызываемая при неудачной обработке исключения
(функция)