exit(1) in C++

Jinku Hu 12 ottobre 2023
  1. Usa la funzione exit per terminare il programma C++ con il codice di stato
  2. Usa exit(1) per terminare il programma C++ con il codice di stato di errore
exit(1) in C++

Questo articolo spiegherà come utilizzare la funzione exit() in C++.

Usa la funzione exit per terminare il programma C++ con il codice di stato

Il programma in esecuzione è generalmente chiamato un processo in un sistema operativo e ha il suo bucle di vita, che è rappresentato come diversi stati. Esistono programmi di lunga durata come i server Web, ma anche quelli devono essere terminati in alcune circostanze o fornendo il segnale dell’utente. La terminazione del processo può essere invocata con la funzione exit(), che fa parte dello standard C ed è inclusa in C++. Prende un argomento intero che specifica lo stato di terminazione del programma che può essere letto dal processo padre se il figlio è atteso.

Il valore convenzionale del codice di stato di ritorno riuscito è 0, e qualsiasi cosa diversa da zero è considerata un codice di errore, che può corrispondere allo scenario predefinito. Notare che ci sono due macro espressioni chiamate EXIT_SUCCESS e EXIT_FAILURE per indicare i corrispondenti codici di uscita passati alla chiamata exit. In genere, il programma ha più flussi di file e file temporanei aperti, che vengono chiusi o rimossi automaticamente quando viene richiamato l’exit.

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

Produzione:

Executing the program...

Usa exit(1) per terminare il programma C++ con il codice di stato di errore

La funzione exit con il valore dell’argomento 1 viene utilizzata per indicare la terminazione con errore. Alcune funzioni che restituiscono il valore di un codice di stato della chiamata riuscita potrebbero essere combinate con l’istruzione condizionale che verifica il valore restituito ed esce dal programma se si è verificato l’errore. Nota che exit(1) equivale a chiamare 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);
}

Produzione:

Executing the program...

Un’altra caratteristica utile della funzione exit() è quella di eseguire funzioni appositamente registrate prima che il programma venga terminato definitivamente. Queste funzioni possono essere definite funzioni regolari e, per essere richiamate al termine, devono essere registrate con la funzione atexit. atexit fa parte della libreria standard e accetta un puntatore a funzione come unico argomento. Si noti che più funzioni possono essere registrate utilizzando le chiamate multiple atexit, e ognuna di esse viene invocata in ordine inverso una volta eseguita l’exit.

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

Produzione:

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