std:: abort
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Program termination | |||||||||||||||||||||
|
|||||||||||||||||||||
| Unreachable control flow | |||||||||||||||||||||
|
(C++23)
|
|||||||||||||||||||||
| Communicating with the environment | |||||||||||||||||||||
| Signals | |||||||||||||||||||||
| Signal types | |||||||||||||||||||||
| Non-local jumps | |||||||||||||||||||||
| Types | |||||||||||||||||||||
|
Определено в заголовочном файле
<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)
|
вызывает быстрое завершение программы без полной очистки ресурсов
(функция) |
|
(C++11)
|
регистрирует функцию для вызова при
std::quick_exit
вызове
(функция) |
|
устанавливает обработчик сигнала для конкретного сигнала
(функция) |
|
|
функция, вызываемая при неудачной обработке исключения
(функция) |
|
|
Документация C
для
abort
|
|