[[noreturn]] void _Exit(int status) noexcept;
Remarks: Программа завершается без выполнения деструкторов для объектов с автоматической, поточной или статической продолжительностью хранения и без вызова функций, переданных в atexit() ([basic.start.term]). Функция _Exit безопасна для сигналов ([csignal.syn]).
[[noreturn]] void abort() noexcept;
Remarks: Программа завершается без выполнения деструкторов для объектов с автоматической, поточной или статической продолжительностью хранения и без вызова функций, переданных в atexit() ([basic.start.term]). Функция abort безопасна для сигналов ([csignal.syn]).
int atexit(c-atexit-handler* f) noexcept;
int atexit(atexit-handler* f) noexcept;
Effects: В atexit() функции регистрации функции , на которую указывает f называть без аргументов при нормальном завершении программы. Не определено , является ли вызов atexit() делает это не happen before вызов exit() преуспеет. [ Note: Эти atexit() функции не вводить гонки данных ([res.on.data.races]). ] — end note
Returns: В atexit() Функции возвращает ноль , если регистрация прошла успешно, отлично от нуля , если он выходит из строя.
[[noreturn]] void exit(int status);
Effects:
Сначала уничтожаются объекты с длительностью хранения потока, связанные с текущим потоком. Затем объекты со статической продолжительностью хранения уничтожаются и вызываются функции, зарегистрированные при вызове atexit .215 Смотрите [basic.start.term] порядок разрушений и вызовов. (Автоматические объекты не уничтожаются в результате вызова exit().)216
Если элемент управления оставляет зарегистрированную функцию, вызванную, exit потому что функция не предоставляет обработчик для возникшего исключения, std::terminate() должна быть вызвана ([except.terminate]).
Затем все открытые потоки C (опосредованные сигнатурами функций, объявленными в <cstdio>) с незаписанными буферизованными данными сбрасываются, все открытые потоки C закрываются, а все файлы, созданные в результате вызова tmpfile() , удаляются.
Наконец, управление возвращается в среду хоста. Если status равно нулю или EXIT_SUCCESS, возвращается форма статуса, successful terminationопределяемая реализацией. Если status есть EXIT_FAILURE, возвращается форма статуса, unsuccessful terminationопределяемая реализацией. В противном случае возвращаемый статус определяется реализацией.217
int at_quick_exit(c-atexit-handler* f) noexcept;
int at_quick_exit(atexit-handler* f) noexcept;
Effects: В at_quick_exit() функции регистрации функции , на которую указывает f называться без аргументов при quick_exit вызове. Не определено , является ли вызов at_quick_exit() делает , что не happen before все вызовы quick_exit будут преуспевать. [ Note: Эти at_quick_exit() функции не вводить гонки данных ([res.on.data.races]). ] [ Порядок регистрации может быть неопределенным, если он был вызван из более чем одного потока. ] [ В регистрации отличается от регистраций и приложениям могут понадобиться вызвать как регистрационные функции с теми же аргументами. ] — end note Note: at_quick_exit — end note Note: at_quick_exit atexit — end note
[[noreturn]] void quick_exit(int status) noexcept;
Effects: Функции, зарегистрированные с помощью вызовов at_quick_exit , вызываются в порядке, обратном их регистрации, за исключением того, что функция должна вызываться после любых ранее зарегистрированных функций, которые уже были вызваны во время регистрации. Объекты не должны быть уничтожены в результате вызова quick_exit. Если элемент управления оставляет зарегистрированную функцию, вызванную, quick_exit потому что функция не предоставляет обработчик для возникшего исключения, std::terminate() должна быть вызвана. [ Note: Функция, зарегистрированная через at_quick_exit , вызывается вызывающим потоком quick_exit, который может быть другим потоком, чем тот, который ее зарегистрировал, поэтому зарегистрированные функции не должны полагаться на идентичность объектов с длительностью хранения потока. ] После вызова зарегистрированных функций вызовет . [ Стандартные файловые буферы не сбрасываются. ] — end note quick_exit _Exit(status) Note: — end note
Remarks: Функция quick_exit безопасна для сигналов ([csignal.syn]), если функции, зарегистрированные с помощью at_quick_exit .
Смотрите также: [basic.start], [basic.start.term], ISO C 7.22.4.
Функция вызывается каждый раз, когда она регистрируется.
Все объекты с автоматической продолжительностью хранения уничтожаются в программе, которая не main function содержит автоматических объектов и выполняет вызов exit(). Управление может быть передано напрямую такой main функции, вызвав исключение, которое было перехвачено main.
Макросы EXIT_FAILURE и EXIT_SUCCESS определены в <cstdlib>.