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

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

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

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

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

  1. #include<cstdlib>
  2. #include<iostream>
  3. using namespace std;
  4. void fun1()
  5. {
  6. cout<<"fun1"<<endl;
  7. }
  8. void fun2()
  9. {
  10. cout<<"fun2"<<endl;
  11. }
  12. int main()
  13. {
  14. atexit(fun1);//注册fun1,主函数终止时调用
  15. atexit(fun2);//注册fun2,主函数终止时调用
  16. cout<<"mian exit"<<endl;
  17. return 0;
  18. }
  19. //运行结果:
  20. main exit
  21. fun2
  22. fun1

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

转载于:https://blog.51cto.com/lwxcy/935181

main函数结束后的调用相关推荐

  1. 【记录一个问题】cuda核函数可能存在栈溢出,导致main()函数退出后程序卡死30秒CUDA...

    调试一个CUDA核函数过程中发现一个奇怪的问题: 调用某个核函数,程序耗时33秒,并且主要时间是main()函数结束后的33秒: 而注释掉此核函数,程序执行不到1秒. 由此可见,可能是某种栈溢出,导致 ...

  2. c语言其他函数调用main函数,C语言中的main函数以及main函数是如何被调用的

    main函数是C语言中比较特殊的函数,C程序总是从main函数开始执行,main函数的原型是: int main(int argc, char *argv[]); 其中argc是命令行参数的个数,ar ...

  3. main函数外也可以调用函数

    在写程序的时候,我们都知道一般一个程序肯定有一个主函数,它是真个程序的入口地址,也就是程序在这里开始执行,就像要进入一个大房子的大门,我们必须要打开这个门,才能进入整个房子里面去!并且可能我们都觉得一 ...

  4. golang 函数结束后 goroutine退出机制

    目录 错误理解 正确理解 协程超时放弃实例 错误理解 原先自以为在自定义函数里面开辟一个新的协程,函数退出,开辟的协程也会强制退出, 正确理解 只有一种情况正在运行的goroutine会因为其他gor ...

  5. 编写一个带有main函数的类,调用上面的汽车类,实例化奔驰、大众、丰田等不同品牌和型号,模拟开车过程:启动、加速、转弯、刹车、息火,实时显示速度。...

    //程序入口     public static void main(String[] args) {         // TODO Auto-generated method stub       ...

  6. c语言编程main,C语言main()函数

    C 语言有两种可能的运行环境中,它们之间有一定差别: (1) 独立环境(freestanding) 在独立环境中,C 程序的运行没有操作系统的支持,因此,只具有最小部分的标准库能力. (2) 宿主环境 ...

  7. C语言main函数、return、exit函数

    main函数 说到return,有必要提及主函数的定义.很多人甚至市面上的一些书籍,都使用了void main( )这一形式 ,其实这是错误的. C/C++ 中从来没有定义过void main( ) ...

  8. main 函数解析(二)—— Linux-0.11 学习笔记(六)

    main函数解析(二)--Linux-0.11 学习笔记(六) 4.6 blk_dev_init函数 void blk_dev_init(void) {int i;for (i=0 ; i<NR ...

  9. c语言规定在一个源程序中main函数的位置是什么?

    一个c程序有且仅有一个main函数,除main函数之外可以有若干个其它的函数,每个函数实现某一特定的操作. C语言规定,在一个源程序中,main函数的位置可以任意. 因为:在一个C语言源程序中,程序总 ...

最新文章

  1. Define change document object
  2. Unix网络编程(六)高级I/O技术之复用技术 select
  3. 发现一个奇怪的问题: 不能把文件取名为 con
  4. Enterprise Services (COM+)服务组件开发异常分析
  5. java的修饰符_java默认的修饰符是什么
  6. 【Matlab】利用diary记录日志/保存命令窗口输出
  7. 2021年中国一次性防护服市场趋势报告、技术动态创新及2027年市场预测
  8. 国产激光雷达厂商禾赛科技B轮融资2.5亿元,光速中国和百度领投
  9. Redhat as5和fedora,centos一样使用yum管理软件
  10. 最全整理浏览器兼容性问题与解决方案
  11. camera - YUV422
  12. Android6.0 camera个数探测
  13. 大学四年,我是怎么靠做外包私活赚了10w+,实现经济独立
  14. 声音文件格式、常见的数字音频格式
  15. (2)防火墙的基本配置---1安全域和端口
  16. 基于TransferNet和nlpcc2018知识图谱搭建问答服务
  17. 成为IT精英,我奋斗7年(震撼!正能量 转)
  18. 231313132131
  19. VC中字符串形式ip地址和整数形式ip地址转换
  20. 在人心惶惶的互联网寒冬之季,值得看看《大佛普拉斯》

热门文章

  1. mybatis中 bit类型判断
  2. Linux防火墙-netfilter-iptables
  3. HOOK大法实现不修改程序代码给程序添加功能
  4. [PYTHON]python 基础笔记(1)
  5. 批处理也玩创建快捷方式
  6. .net知识和学习方法系列(三)CSharp中控件台的输入输出
  7. 取得textarea中行的三种写法
  8. 《编码-隐匿在计算机软硬背后的语言》第七章我们的十个数字
  9. .Net基础篇_学习笔记_第六天_For循环语法
  10. Spring Boot工程在IDEA中运行报错