C ++ atexit () - biblioteka standardowa C ++

Funkcja atexit () w C ++ rejestruje funkcję, która ma być wywołana po normalnym zakończeniu programu.

Funkcja atexit () w C ++ rejestruje funkcję, która ma być wywołana po normalnym zakończeniu programu.

atexit () prototyp

 extern int atexit (void (* func) (void));

Ta funkcja jest zdefiniowana w pliku nagłówkowym.

atexit () Parametry

  • func: Wskaźnik do funkcji, która ma zostać wywołana po normalnym zakończeniu programu.

atexit () Zwracana wartość

Funkcja atexit () zwraca:

  • Zero, jeśli rejestracja funkcji zakończyła się pomyślnie.
  • Wartość różna od zera, jeśli rejestracja funkcji nie powiodła się.

Przykład 1: Jak działa funkcja 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; )

Po uruchomieniu programu wynik będzie następujący:

 Rejestracja powiodła się Program kończy się pomyślnie

Można zarejestrować więcej niż jedną funkcję do wykonania po zakończeniu.

Jeśli zarejestrowano więcej niż jedną funkcję atexit, są one wykonywane w odwrotnej kolejności, tj. Funkcja zarejestrowana jako ostatnia jest wykonywana jako pierwsza. Tę samą funkcję można zarejestrować więcej niż raz.

Liczba wywołań funkcji, które można zarejestrować za pomocą atexit (), zależy od konkretnej implementacji biblioteki. Jednak minimalny limit to 32.

Przykład 2: Rejestrowanie wielu funkcji za 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; )

Po uruchomieniu programu wynik będzie następujący:

 Rejestracja zakończona sukcesem Wyjście z funkcji 3 Wyjście z funkcji 2 Wyjście z funkcji 1

Jeśli zarejestrowana funkcja zgłasza nieobsługiwany wyjątek podczas wywoływania po zakończeniu, wywoływana jest funkcja terminate ().

Przykład 3: atexit () z funkcją generującą nieobsługiwany wyjątek

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

Po uruchomieniu programu wynik będzie następujący:

 Rejestracja powiodła się Generuje wyjątek

Interesujące artykuły...