Разница между std :: quick_exit и std :: abort

Опубликовано: 4 Декабря, 2021

std :: quick_exit ()

Это вызывает нормальное завершение программы без полной очистки ресурсов.
Синтаксис:

 void quick_exit (int exit_code) нет кроме;

В случае выполнения потоков коды становятся сложными, и знание выполнения потоков затруднено. В то время как один поток может ожидать завершения процесса, в то время как другой поток ожидает предыдущего потока. В таких случаях реальные программы обычно блокируются, и выход из них неприятен. Администратор должен принудительно запустить систему или закрыть пользовательский интерфейс и т. Д., Чтобы выйти из-под блокировки. Для этого был создан std :: quick_exit () . Он завершает программу, избавляя нас от сложной части выхода из тупика при выполнении реальной программы. Он очищает ввод-вывод, но не сбрасывает статические деструкторы. Другая функция at_quick_exit ()

 int at_quick_exit (void (* func) (void));

принимает функцию в качестве параметра, который должен выполняться при вызове функции quick_exit (). Зарегистрированные для этого функции вызываются в порядке, обратном их выполнению.

#include <cstdlib>
void atEXIT ()
{
  cout << "Функция быстрого выхода.";
}
int main ()
{
  at_quick_exit (atEXIT);
  cout << "Основная функция";
  quick_exit (0);
  cout << "Конец основного"; 
  возврат 0;
}
Выход: основная функция
          Функция быстрого выхода.    

std :: abort ()

Вызывает ненормальное завершение программы, если SIGABRT не перехватывается обработчиком сигнала, переданным в std :: signal, и обработчик не возвращает.
Синтаксис:

 void abort () no except;

POSIX указывает, что функция прерывания отменяет блокировку или игнорирование сигнала SIGABRT.

#include <cstdlib>

int main ()
{
  ФАЙЛ * fp;
  fp = fopen ("myfile.txt", "r");
  если (fp == NULL)
  {
    fputs ("Ошибка при открытии файла  n", stderr);
    abort ();
  }
  fclose (fp);
  возврат 0;
}
Вывод: файл с именем myfile.txt, если он не найден или не открывается по какой-либо причине ошибка 
            сообщение печатается, и функция прерывания завершает программу.

Сходства: обе функции std :: quick_exit () и std :: abort () определены в заголовке cstdlib. Обе эти функции не имеют параметров и исключений. Оба они также не имеют возвращаемого значения. Они используются для завершения программы, но все же отличаются друг от друга.
Различия: причина введения функции quick_exit () заключалась в том, чтобы завершить запущенную программу, очистив ввод-вывод, и при этом получить некоторую часть программы, т.е. функции, зарегистрированные в at_quick_exit (), которые должны быть выполнены, тогда как функция std :: abort () завершается программа без выполнения, кроме того, части программы и без очистки ввода-вывода.

Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .