Пространства имён
Варианты
Действия

std::abort

Материал из cppreference.com
< cpp‎ | utility‎ | program
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Утилиты поддержки программ
Прерывание программы
abort
(C++11)
(C++11)
Недостижимый поток управления
Взаимодействие с окружением
Сигналы
Типы сигналов
Нелокальные переходы
Типы
 
Определено в заголовочном файле <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
(функция) [править]
устанавливает обработчик для конкретного сигнала
(функция) [править]
функция, вызываемая при сбое обработки исключения
(функция) [править]