atexit()函数调用注册函数的顺序
来源:互联网 发布:mysql if 编辑:程序博客网 时间:2024/05/14 21:36
首先我们先在Linux环境下验证一下atexit函数调用注册函数的顺序:
为此写了四个fun函数,并且四个fun函数和main函数各自打印一句话,通过屏幕上的输出显示ulai验证调用顺序:
(1)fun函数 (2)main函数
(3)makefile文件 (4)运行结果
过程分析:atexit函数先注册四个fun函数,,然后等待3秒,再打印"hello main"(如果main函数中输出部分不加\n,则main函数要输出的内容会先放到标准输出缓冲区中,当main中调用exit函数的时候,会做一些自身清理工作,同时刷新标准输出缓冲区中的内容),当执行到exit(0)时,exit会自动调用这些已注册过的函数,但是由于压栈过程中先入后出的原则,所以先注册的函数最后执行
关于atexit:
一个进程可以登记多达32个函数,这些函数将由exit自动调用,通常这32个函数被称为终止处理程序,并调用atexit函数来登记这些函数,atexit的参数是一个函数地址,当调用此函数时无须传递任何参数,该函数也不能返回值,atexit函数称为终止处理程序注册程序,注册完成以后,当函数终止是exit()函数会主动的调用前面注册的各个函数,但是exit函数调用这些函数的顺序于这些函数登记的顺序是相反的,我认为这实质上是参数压栈造成的,参数由于压栈顺序而先入后出。同时如果一个函数被多次登记,那么该函数也将多次的执行。
关于exit:
exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件。
exit()函数用于在程序运行的过程中随时结束程序,exit的参数state是返回给操作系统,返回0表示程序正常结束,非0表示程序非正常结束
- atexit()函数调用注册函数的顺序
- atexit函数调用注册函数的顺序
- atexit()函数调用注册的顺序
- 注册终止函数atexit
- atexit注册终止函数
- atexit注册函数
- atexit()注册终止函数
- 注册终止函数atexit的作用
- atexit()函数 -- 注册终止函数
- c++ 局部变量 全局变量 atexit注册函数 析构顺序
- atexit()函数来注册程序正常终止时被调用的函数
- atexit()函数登记顺序的的验证
- Linux中atexit()在有多个自定义函数时对函数的调用顺序验证
- atexit()函数调用
- atexit (注册终止函数)
- 注册终止处理函数atexit()
- atexit——注册函数
- atexit 在函数正常退出时执行的函数注册
- UML类图几种关系的总结
- Android中popupwindow的用法
- BGRA转灰度数据
- 【LeetCode 】 Median of Two Sorted Arrays 简单高效的解法
- 使 ZCImagePickerController 支持预览功能
- atexit()函数调用注册函数的顺序
- Linux基础命令 最后附教学视频
- Android Studio建立jni开发环境
- 【自制】3D全息投影
- create来save数据,表格中和post过来的数据必须一致;
- 【9203】众数
- snprintf与_snprintf的区别
- 怎么运用ABBYY FineReader实现JPG到PDF的转换
- JQuery ajax设置Request Headers