C小加

厚德 博学 求真 至善 The bright moon and breeze
posts - 145, comments - 195, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

学习笔记--main函数结束后的调用

Posted on 2012-03-11 19:46 C小加 阅读(1755) 评论(1)  编辑 收藏 引用 所属分类: C++和面向对象

本以为主函数main是首先被调用的函数,后来发现操作系统会调用一个启动函数,对C++运行库进行初始化。

本以为主函数main被返回之后操作系统将回收资源,却不知一个重要的函数—atexit()

 

程序退出的时候需要一些诸如释放资源的操作,但是程序的退出有很多种,可能是main函数结束范围一个值传递给exit(),也可能是一些其他的原因,所以需要一种与程序结束方式无关的方法来进行程序退出时必要的处理。

 

函数原型:int atexit(void(*)(void));

函数作用:注册一个函数,这个函数在程序结束的时候被调用

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

void fun1()
{
    cout<<"fun1"<<endl;
}
void fun2()
{
    cout<<"fun2"<<endl;
}

int main()
{
    atexit(fun1);//注册fun1,主函数终止时调用
    atexit(fun2);//注册fun2,主函数终止时调用
    cout<<"mian exit"<<endl;
    return 0;
}


//运行结果:
main exit
fun2
fun1


从结果中可以发现fun1和fun2两个函数在主函数结束之后被调用,而且调用的顺序与注册的顺序相反。


Feedback

# re: 学习笔记--main函数结束后的调用[未登录]  回复  更多评论   

2012-03-11 20:49 by 路人甲
有点像全局对象的析构函数

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理