atexit() function in C/C++
Last Updated :
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
#include <bits/stdc++.h>
using namespace std;
void done()
{
cout << "Exiting Successfully"
<< "\n" ;
}
int main()
{
int value;
value = atexit (done);
if (value != 0) {
cout << "atexit () function registration failed" ;
exit (1);
}
cout << " Registration successful"
<< "\n" ;
return 0;
}
|
Output:
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
#include <bits/stdc++.h>
using namespace std;
void first()
{
cout << "Exit first" << endl;
}
void second()
{
cout << "Exit Second" << endl;
}
void third()
{
cout << "Exit Third" << endl;
}
void fourth()
{
cout << "Exit Fourth" << endl;
}
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);
}
cout << "Registration successful" << endl;
return 0;
}
|
Output:
Registration successful
Exit Fourth
Exit Third
Exit Second
Exit first
Program 3 :
CPP
#include <bits/stdc++.h>
using namespace std;
void shows_Exception()
{
int y = 50, z = 0;
int x = y / z;
cout << "Divided by zero" ;
}
int main()
{
int value;
value = atexit (shows_Exception);
if (value != 0) {
cout << "atexit() function registration failed" ;
exit (1);
}
cout << "Registration successful" << endl;
return 0;
}
|
Note: If a registered function throws an exception which cannot be handled, then the terminate() function is called.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...