atexit() function in C/C++ - GeeksforGeeks

04 Feb, 2021
The function pointed by atexit() is automatically called without arguments when the program terminates normally. In case more than one function has been specified by different calls to the atexit() function, all are executed in the order of a stack (i.e. the last function specified is the first to be executed at exit). A single function can be registered to be executed at exit more than once. Syntax :  
extern "C" int atexit (void (*func)(void)) noexcept;
extern "C++" int atexit (void (*func)(void)) noexcept
Note: extern refers that the name will refer, to the same object in the entire program .Parameters : The function accepts a single mandatory parameter func which specifies the pointer to the function to be called on normal program termination(Function to be called). Return Value : The function returns following values:  
Zero, if the function registration is successful
Non zero, if the function registration failed
Below programs illustrate the above-mentioned function:Program 1:  
CPP
// C++ program to illustrate// atexit() function#include <bits/stdc++.h>using namespace std; // Returns no value, and takes nothing as a parametervoid done(){    cout << "Exiting Successfully"         << "\n"; // Executed second}// Driver Codeint 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
 
If atexit function is called more than once, then all the specified functions will be executed in a reverse manner, same as of the functioning of the stack. Program 2:  
CPP
// C++ program to illustrate// more than one atexit function#include <bits/stdc++.h>using namespace std; // Executed last, in a Reverse mannervoid first(){    cout << "Exit first" << endl;} // Executed thirdvoid second(){    cout << "Exit Second" << endl;} // Executed Secondvoid third(){    cout << "Exit Third" << endl;} // Executed firstvoid fourth(){    cout << "Exit Fourth" << endl;}// Driver Codeint 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
 
Program 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 Codeint 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;}
Note: If a registered function throws an exception which cannot be handled, then the terminate() function is called.  
lissette5
C-Library
CPP-Functions
C Language
C++
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
TCP Server-Client implementation in C
Exception Handling in C++
Multithreading in C
'this' pointer in C++
Arrow operator -> in C/C++ with Examples
Vector in C++ STL
Inheritance in C++
Initialize a vector in C++ (6 different ways)
Map in C++ Standard Template Library (STL)
C++ Classes and Objects