La función atexit () en C ++ registra una función que se llamará en la terminación normal del programa.
La función atexit () en C ++ registra una función que se llamará en la terminación normal del programa.
prototipo atexit ()
extern int atexit (void (* func) (void));
Esta función se define en el archivo de encabezado.
Parámetros atexit ()
- func: puntero a la función que se llamará en la terminación normal del programa.
atexit () Valor de retorno
La función atexit () devuelve:
- Cero si el registro de la función se realiza correctamente.
- Distinto de cero si el registro de la función falló.
Ejemplo 1: ¿Cómo funciona la función 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; )
Cuando ejecute el programa, la salida será:
Registro exitoso Programa saliendo exitosamente
Se puede registrar más de una función para ejecutarse al finalizar.
Si se registran más de una función atexit, se ejecutan en orden inverso, es decir, la función registrada al final se ejecuta primero. La misma función se puede registrar más de una vez.
El número de llamadas a funciones que se pueden registrar con atexit () depende de la implementación de la biblioteca en particular. Sin embargo, el límite mínimo es 32.
Ejemplo 2: Registro de funciones múltiples con 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; )
Cuando ejecute el programa, la salida será:
Registro exitoso Salir de la función 3 Salir de la función 2 Salir de la función 1
Si una función registrada lanza una excepción no controlada cuando se llama al finalizar, se llama a la función terminate ().
Ejemplo 3: atexit () con función que lanza una excepción no controlada
#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; )
Cuando ejecute el programa, la salida será:
Registro exitoso genera una excepción