La función apuntada por atexit() se llama automáticamente sin argumentos cuando el programa termina normalmente. En caso de que se haya especificado más de una función mediante diferentes llamadas a la función atexit() , todas se ejecutan en el orden de una pila (es decir, la última función especificada es la primera que se ejecuta al salir). Se puede registrar una sola función para que se ejecute al salir más de una vez.
Sintaxis:
extern "C" int atexit (void (*func)(void)) noexcept; extern "C++" int atexit (void (*func)(void)) noexcept
Nota: extern se refiere a que el nombre se referirá al mismo objeto en todo el programa.
Parámetros: la función acepta un solo parámetro obligatorio func que especifica el puntero a la función que se llamará en la finalización normal del programa (Función que se llamará).
Valor devuelto: la función devuelve los siguientes valores:
- Cero, si el registro de la función es exitoso
- Distinto de cero, si el registro de la función falló
Los siguientes programas ilustran la función mencionada anteriormente:
Programa 1:
CPP
// C++ program to illustrate // atexit() function #include <bits/stdc++.h> using namespace std; // Returns no value, and takes nothing as a parameter void done() { cout << "Exiting Successfully" << "\n"; // Executed second } // Driver Code int main() { int value; value = atexit(done); if (value != 0) { cout << "atexit () function registration failed"; exit(1); } cout << " Registration successful" << "\n"; // Executed First return 0; }
Registration successful Exiting Successfully
Si se llama a la función atexit más de una vez, todas las funciones especificadas se ejecutarán de manera inversa, igual que el funcionamiento de la pila.
Programa 2:
CPP
// C++ program to illustrate // more than one atexit function #include <bits/stdc++.h> using namespace std; // Executed last, in a Reverse manner void first() { cout << "Exit first" << endl; } // Executed third void second() { cout << "Exit Second" << endl; } // Executed Second void third() { cout << "Exit Third" << endl; } // Executed first void fourth() { cout << "Exit Fourth" << endl; } // Driver Code int main() { int value1, value2, value3, value4; value1 = atexit(first); value2 = atexit(second); value3 = atexit(third); value4 = atexit(fourth); if ((value1 != 0) or (value2 != 0) or (value3 != 0) or (value4 != 0)) { cout << "atexit() function registration Failed" << endl; exit(1); } // Executed at the starting cout << "Registration successful" << endl; return 0; }
Registration successful Exit Fourth Exit Third Exit Second Exit first
Programa 3:
CPP
// C++ program to illustrate // atexit() function when it throws an exception. #include <bits/stdc++.h> using namespace std; void shows_Exception() { int y = 50, z = 0; // Program will terminate here int x = y / z; // Cannot get printed as the program // has terminated cout << "Divided by zero"; } // Driver Code int main() { int value; value = atexit(shows_Exception); if (value != 0) { cout << "atexit() function registration failed"; exit(1); } // Executed at the starting cout << "Registration successful" << endl; return 0; }
Nota: si una función registrada arroja una excepción que no se puede manejar, se llama a la función terminar().
Publicación traducida automáticamente
Artículo escrito por AmanSrivastava1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA