Ce face std::exit
std::exit(cod) (din <cstdlib>) termină programul din orice punct, nu doar din main. Codul de ieșire ajunge la sistemul de operare: 0 sau EXIT_SUCCESS înseamnă succes, EXIT_FAILURE (de obicei 1) înseamnă eroare. Scripturile și alte programe verifică acest cod.
Înainte de oprire, exit apelează funcțiile înregistrate cu std::atexit, distruge obiectele globale și statice și golește fluxurile de ieșire. Obiectele locale (de pe stivă) nu sunt distruse, deci destructorii lor nu rulează. De aceea, în main este preferabil return cod;.
Parametri
| Parametru | Descriere |
|---|---|
cod |
Codul de ieșire: EXIT_SUCCESS, EXIT_FAILURE sau alt număr. |
Ce returnează
Nu revine niciodată.
Exemple
Exemplul 1: Ce se execută la exit
Destructorul obiectului static rulează, cel al obiectului local nu.
#include <cstdlib>
#include <print>
struct Resursa {
const char* nume;
~Resursa() { std::println("Închid {}", nume); }
};
void la_final() {
std::println("Funcția atexit rulează");
}
int main() {
static Resursa jurnal{"jurnalul (static)"};
Resursa fisier{"fișierul (local)"};
std::atexit(la_final);
std::println("Opresc programul");
std::exit(EXIT_SUCCESS);
}
Rezultat
Opresc programul
Funcția atexit rulează
Închid jurnalul (static)
Exemplul 2: Ieșire cu cod de eroare
#include <cstdlib>
#include <fstream>
#include <print>
void incarca_configurare() {
std::ifstream f("config.txt");
if (!f) {
std::println(stderr, "Eroare: fișierul config.txt lipsește");
std::exit(EXIT_FAILURE);
}
}
int main() {
incarca_configurare();
std::println("Configurare încărcată");
}
Rezultat (programul se oprește cu codul 1)
Eroare: fișierul config.txt lipsește
Greșeli frecvente
- Folosești
exitîn mijlocul programului și te bazezi pe destructori (fișiere, conexiuni) ca să salveze date: obiectele locale nu sunt distruse. Aruncă o excepție sau returnează dinmain. - Apelezi
exitdintr-un destructor al unui obiect static sau dintr-o funcțieatexit: comportament nedefinit.
Comenzi înrudite
std::system: Rulează o comandă în shell-ul sistemului de operare și așteaptă să se termine.std::getenv: Citește valoarea unei variabile de mediu (de exemplu HOME sau PATH); returnează nullptr dacă nu există.