Funkce atexit () v C ++ registruje funkci, která má být volána při normálním ukončení programu.
Funkce atexit () v C ++ registruje funkci, která má být volána při normálním ukončení programu.
prototyp atexit ()
extern int atexit (void (* func) (void));
Tato funkce je definována v hlavičkovém souboru.
Parametry atexit ()
- func: Ukazatel na funkci, která má být vyvolána při normálním ukončení programu.
atexit () Vrátí hodnotu
Funkce atexit () vrací:
- Nula, pokud je registrace funkce úspěšná.
- Nenulové, pokud se registrace funkce nezdařila.
Příklad 1: Jak funguje funkce atexit ()?
#include #include using namespace std; void bye() ( cout << "Program Exiting Successfully"; ) int main() ( int x; x = atexit(bye); if (x != 0) ( cout << "Registration Failed"; exit(1); ) cout << "Registration successful" << endl; return 0; )
Když spustíte program, výstup bude:
Registrace byla úspěšně ukončena
Lze zaregistrovat více než jednu funkci, která se provede při ukončení.
Pokud je zaregistrováno více než jedna funkce atexit, jsou provedeny v opačném pořadí, tj. Funkce registrovaná atlast je provedena nejprve. Stejnou funkci lze zaregistrovat více než jednou.
Počet volání funkcí, které lze zaregistrovat pomocí atexit (), závisí na konkrétní implementaci knihovny. Minimální limit je však 32.
Příklad 2: Registrace více funkcí pomocí atexit ()
#include #include using namespace std; void exit1() ( cout << "Exit Function 1" << endl; ) void exit2() ( cout << "Exit Function 2" << endl; ) void exit3() ( cout << "Exit Function 3" << endl; ) int main() ( int x1, x2, x3; /* Executed at last*/ x1 = atexit(exit1); x2 = atexit(exit2); /* Executed at first */ x3 = atexit(exit3); if ((x1 != 0) or (x2 != 0) or (x3 != 0)) ( cout << "Registration Failed"; exit(1); ) cout << "Registration successful" << endl; return 0; )
Když spustíte program, výstup bude:
Úspěšná registrace Ukončit funkci 3 Ukončit funkci 2 Ukončit funkci 1
Pokud registrovaná funkce vyvolá neošetřenou výjimku při volání při ukončení, je volána funkce terminate ().
Příklad 3: atexit () s funkcí vyvolávající neošetřenou výjimku
#include #include using namespace std; void bye() ( cout << "Generates Exception"; int a = 5, b = 0; int x = a/b; /* Program will terminate here */ cout << "Division by zero"; ) int main() ( int x; x = atexit(bye); if (x != 0) ( cout << "Registration Failed"; exit(1); ) cout << "Registration successful" << endl; return 0; )
Když spustíte program, výstup bude:
Registrace úspěšná Generuje výjimku