exit(1) en C++

Jinku Hu 12 octobre 2023
  1. Utilisez la fonction exit pour terminer le programme C++ avec le code d’état
  2. Utilisez exit(1) pour terminer le programme C++ avec le code d’état d’échec
exit(1) en C++

Cet article explique comment utiliser la fonction exit() en C++.

Utilisez la fonction exit pour terminer le programme C++ avec le code d’état

Le programme en cours d’exécution est généralement appelé un processus dans un système d’exploitation, et il a son cycle de vie, qui est représenté par différents états. Il existe des programmes de longue durée comme les serveurs Web, mais même ceux-ci doivent être arrêtés dans certaines circonstances ou en délivrant le signal de l’utilisateur. La terminaison du processus peut être invoquée avec la fonction exit(), qui fait partie du standard C et inclus dans C++. Il prend un argument entier qui spécifie l’état de fin du programme qui peut être lu à partir du processus parent si l’enfant est attendu.

La valeur conventionnelle du code d’état de retour réussi est 0, et tout autre que zéro est considéré comme un code d’erreur, qui peut correspondre au scénario prédéfini. Notez qu’il existe deux expressions de macro appelées EXIT_SUCCESS et EXIT_FAILURE pour désigner les codes de sortie correspondants transmis à l’appel exit. Généralement, le programme a plusieurs flux de fichiers et fichiers temporaires ouverts, qui sont fermés ou supprimés automatiquement lorsque la exit est invoquée.

#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);
}

Production:

Executing the program...

Utilisez exit(1) pour terminer le programme C++ avec le code d’état d’échec

La fonction exit avec la valeur d’argument 1 est utilisée pour indiquer la fin avec échec. Certaines fonctions qui renvoient la valeur d’un code d’état d’appel réussi peuvent être combinées avec l’instruction conditionnelle qui vérifie la valeur de retour et quitte le programme si l’erreur s’est produite. Notez que exit(1) revient à appeler 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);
}

Production:

Executing the program...

Une autre fonctionnalité utile de la fonction exit() est d’exécuter des fonctions spécialement enregistrées avant que le programme ne se termine définitivement. Ces fonctions peuvent être définies comme des fonctions régulières, et pour être appelées à la terminaison, elles doivent être enregistrées auprès de la fonction atexit. atexit fait partie de la bibliothèque standard et prend un pointeur de fonction comme seul argument. Notez que plusieurs fonctions peuvent être enregistrées en utilisant les multiples appels atexit, et chacune d’entre elles est invoquée dans l’ordre inverse une fois que exit() s’exécute.

#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);
}

Production:

Executing the program...
at_exit_func2 called
at_exit_func called
Auteur: 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