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/w/cpp/utility/program/abort

Spec-Zone.ru

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