Spec-Zone.ru › C++

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

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/program/abort

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API