exit(1) in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Funktion exit, um das C++-Programm mit Statuscode zu beenden
  2. Verwenden Sie exit(1), um das C++-Programm mit Fehlerstatuscode zu beenden
exit(1) in C++

Dieser Artikel erklärt, wie Sie die Funktion exit() in C++ verwenden.

Verwenden Sie die Funktion exit, um das C++-Programm mit Statuscode zu beenden

Das laufende Programm wird in einem Betriebssystem allgemein als Prozess bezeichnet und hat seinen Lebenszyklus, der in verschiedenen Zuständen dargestellt wird. Es gibt lang laufende Programme wie Webserver, aber auch diese müssen unter Umständen beendet werden oder indem das Signal des Benutzers geliefert wird. Die Prozessbeendigung kann mit der Funktion exit() aufgerufen werden, die Teil des C-Standards und in C++ enthalten ist. Es benötigt ein ganzzahliges Argument, das den Programmbeendigungsstatus angibt, der vom Elternprozess gelesen werden kann, wenn auf den Kindprozess gewartet wird.

Der herkömmliche Wert des Statuscodes für eine erfolgreiche Rückkehr ist 0, und alles andere als Null wird als Fehlercode betrachtet, der dem vordefinierten Szenario entsprechen kann. Beachten Sie, dass es zwei Makroausdrücke namens EXIT_SUCCESS und EXIT_FAILURE gibt, um die entsprechenden Exit-Codes zu bezeichnen, die an den exit-Aufruf übergeben werden. Im Allgemeinen hat das Programm mehrere Dateiströme und temporäre Dateien geöffnet, die automatisch geschlossen oder entfernt werden, wenn der exit aufgerufen wird.

#include <unistd.h>

#include <iostream>

using std::cout;
using std::endl;

int main() {
  printf("Executing the program...\n");
  sleep(3);

  exit(0);
  //    exit(EXIT_SUCCESS);
}

Ausgabe:

Executing the program...

Verwenden Sie exit(1), um das C++-Programm mit Fehlerstatuscode zu beenden

Die Funktion exit mit dem Argumentwert 1 wird verwendet, um die Beendigung mit Fehler anzuzeigen. Einige Funktionen, die den Wert eines erfolgreichen Aufrufstatuscodes zurückgeben, könnten mit der bedingten Anweisung kombiniert werden, die den Rückgabewert überprüft und das Programm beendet, wenn der Fehler aufgetreten ist. Beachten Sie, dass exit(1) dasselbe ist wie der Aufruf von exit(EXIT_FAILURE).

#include <unistd.h>

#include <iostream>

using std::cout;
using std::endl;

int main() {
  if (getchar() == EOF) {
    perror("getline");
    exit(EXIT_FAILURE);
  }

  cout << "Executing the program..." << endl;
  sleep(3);

  exit(1);
  // exit(EXIT_SUCCESS);
}

Ausgabe:

Executing the program...

Ein weiteres nützliches Feature der Funktion exit() besteht darin, speziell registrierte Funktionen auszuführen, bevor das Programm endgültig beendet wird. Diese Funktionen können als reguläre Funktionen definiert werden, und um bei der Beendigung aufgerufen zu werden, müssen sie mit der Funktion atexit registriert werden. atexit ist Teil der Standardbibliothek und verwendet als einziges Argument einen Funktionszeiger. Beachten Sie, dass mehrere Funktionen mit den mehreren atexit-Aufrufen registriert werden können und jede von ihnen in umgekehrter Reihenfolge aufgerufen wird, sobald der exit() ausgeführt wird.

#include <unistd.h>

#include <iostream>

using std::cout;
using std::endl;

static void at_exit_func() { cout << "at_exit_func called" << endl; }

static void at_exit_func2() { cout << "at_exit_func called" << endl; }

int main() {
  if (atexit(at_exit_func) != 0) {
    perror("atexit");
    exit(EXIT_FAILURE);
  }

  if (atexit(at_exit_func2) != 0) {
    perror("atexit");
    exit(EXIT_FAILURE);
  }

  cout << "Executing the program..." << endl;
  sleep(3);

  exit(EXIT_SUCCESS);
}

Ausgabe:

Executing the program...
at_exit_func2 called
at_exit_func called
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook