función atexit() en C/C++

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;
}
Producción: 

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;
}
Producción: 

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *