当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ atexit()用法及代码示例


C++ 中的atexit() 函数注册了一个在正常程序终止时调用的函数。

C++ 中的atexit() 函数注册了一个在正常程序终止时调用的函数。

atexit()原型

extern int atexit (void (*func)(void));

该函数在<cstdlib> 头文件中定义。

参数:

  • func:指向在正常程序终止时调用的函数的指针。

返回:

atexit() 函数返回:

  • 如果函数注册成功,则为零。
  • 如果函数注册失败,则非零。

示例 1:atexit() 函数如何工作?

#include <iostream>
#include <cstdlib>
using namespace std;

void bye()
{
	cout << "Program Exiting Successfully";
}

int main()
{
	int x;
	x = atexit(bye);

	if (x != 0)
	{
		cout << "Registration Failed";
		exit(1);
	}

	cout << "Registration successful" << endl;
	return 0;
}

运行程序时,输出将是:

Registration successful
Program Exiting Successfully

可以注册多个函数以在终止时执行。

如果注册了多个 atexit 函数,则按相反的顺序执行,即先执行 atlast 注册的函数。可以多次注册相同的函数。

可以使用atexit() 注册的函数调用的数量取决于特定的库实现。但是,最低限制是 32。

示例 2:使用atexit() 注册多个函数

#include <iostream>
#include <cstdlib>
using namespace std;

void exit1()
{
	cout << "Exit Function 1" << endl;
}

void exit2()
{
	cout << "Exit Function 2" << endl;
}

void exit3()
{
	cout << "Exit Function 3" << endl;
}

int main()
{
	int x1, x2, x3;

	/* Executed at last*/
	x1 = atexit(exit1);
	x2 = atexit(exit2);

	/* Executed at first */
	x3 = atexit(exit3);
	if ((x1 != 0) or (x2 != 0) or (x3 != 0))
	{
		cout << "Registration Failed";
		exit(1);
	}

	cout << "Registration successful" << endl;
	return 0;
}

运行程序时,输出将是:

Registration successful
Exit Function 3
Exit Function 2
Exit Function 1

如果已注册的函数在终止时调用时抛出未处理的异常,则会调用 terminate() 函数。

示例 3:atexit() 函数抛出未处理的异常

#include <iostream>
#include <cstdlib>
using namespace std;

void bye()
{
	cout << "Generates Exception";
	int a = 5, b = 0;
	int x = a/b;
	/* Program will terminate here */
	cout << "Division by zero";
}

int main()
{
	int x;
	x = atexit(bye);

	if (x != 0)
	{
		cout << "Registration Failed";
		exit(1);
	}
	cout << "Registration successful" << endl;

	return 0;
}

运行程序时,输出将是:

Registration successful
Generates Exception

相关用法


注:本文由纯净天空筛选整理自 C++ atexit()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。