Функция atexit
Функция atexit регистрирует функцию,
которая будет автоматически вызвана при
нормальном завершении программы. В первый
параметр мы передаем указатель на функцию
без параметров и без возвращаемого значения,
которая должна быть выполнена при выходе из
программы. Функция возвращает 0 в
случае успешной регистрации и ненулевое
значение в случае ошибки. Зарегистрированные
функции вызываются в порядке, обратном их
регистрации.
Синтаксис
int atexit(void (*func)(void));
Пример
Давайте зарегистрируем одну функцию, которая выведет сообщение при завершении программы:
#include <iostream>
#include <cstdlib>
using namespace std;
void goodbye()
{
cout << "Goodbye!" << endl;
}
int main()
{
atexit(goodbye);
cout << "Program is running" << endl;
return 0;
}
Результат выполнения кода:
"Program is running"
"Goodbye!"
Пример
Давайте зарегистрируем несколько функций и посмотрим, в каком порядке они будут вызваны:
#include <iostream>
#include <cstdlib>
using namespace std;
void first()
{
cout << "First" << endl;
}
void second()
{
cout << "Second" << endl;
}
void third()
{
cout << "Third" << endl;
}
int main()
{
atexit(first);
atexit(second);
atexit(third);
cout << "Main" << endl;
return 0;
}
Результат выполнения кода:
"Main"
"Third"
"Second"
"First"
Пример
Давайте проверим результат регистрации
функции с помощью atexit:
#include <iostream>
#include <cstdlib>
using namespace std;
void cleanup()
{
cout << "Cleaning up" << endl;
}
int main()
{
int res = atexit(cleanup);
if (res == 0) {
cout << "Registration successful" << endl;
} else {
cout << "Registration failed" << endl;
}
return 0;
}
Результат выполнения кода:
"Registration successful"
"Cleaning up"