exit()和_exit()这两个函数都是用于函数退出,但这两者有一些细微的差别,在exit()函数里会调用_exit()函数。下面来看看exit()的函数代码大概:

void exit(int status)
{while(_exit_funcs != NULL){..._exit_funcs = _exit_funcs->next;}..._exit(status);
}

其中_exit_funcs是存储由__cxa_atexit和atexit注册的函数的链表,而这个while循环则遍历该链表并逐个调用这些注册的函数。最后再调用_exit(),这个函数的作用仅仅是调用了exit这个系统调用。即_exit()调用后,进程会直接结束。

所以exit()和_exit()的区别在于,exit()会首先将所有使用atexit注册的函数进行调用以后再推出,而_exit()则是直接结束程序。
注意:_cxa_atexit()和atexit()这两个函数的作用相同,可以看成等价。这两个函数的作用是注册一些函数用于在main()函数调用完以后再调用。
#include <stdio.h>
#include <stdlib.h>void test1()
{printf("hello, test1.\n");
}
void test2()
{printf("hello, test2.\n");
}
void test3()
{printf("hello, test3.\n");
}
void test4()
{printf("hello, test4.\n");
}
void test5()
{printf("hello, test5.\n");
}int main()
{   atexit(test1);atexit(test2);atexit(test3);atexit(test4);atexit(test5);printf("hello, main.\n");return 0;
}

运行结果:

(1)使用exit()函数后

#include <stdio.h>
#include <stdlib.h>void test1()
{printf("hello, test1.\n");
}
void test2()
{printf("hello, test2.\n");
}
void test3()
{printf("hello, test3.\n");
}
void test4()
{printf("hello, test4.\n");
}
void test5()
{printf("hello, test5.\n");exit(0);
}int main()
{   atexit(test1);atexit(test2);atexit(test3);atexit(test4);atexit(test5);printf("hello, main.\n");return 0;
}

运行结果:

(2)使用_exit()函数

#include <stdio.h>
#include <stdlib.h>void test1()
{printf("hello, test1.\n");
}
void test2()
{printf("hello, test2.\n");
}
void test3()
{printf("hello, test3.\n");
}
void test4()
{printf("hello, test4.\n");
}
void test5()
{printf("hello, test5.\n");_exit(0);
}int main()
{   atexit(test1);atexit(test2);atexit(test3);atexit(test4);atexit(test5);printf("hello, main.\n");return 0;
}

exit()和_exit()两个函数的区别相关推荐

  1. 文本检查点web_reg_find和web_find两个函数的区别

    LR脚本实战:文本检查点web_reg_find和web_find两个函数的区别 web_reg_find是先注册(register)后查找的:使用时将它放在请求语句的前面. 而web_find是查找 ...

  2. matlab中的conj函数,matlab中 conv和xcorr两个函数的区别conj()函数

    conv()函数表示的是对某个离散序列做卷积运算,比如说两个数组: x(n)=[3,11,7,0,-1,4,2],-3<=n<=3;h(n)=[2,3,0,-5,2,1],-1<=n ...

  3. matlab中conj和,[转载]matlab中 conv和xcorr两个函数的区别conj()函数

    conv()函数表示的是对某个离散序列做卷积运算,比如说两个数组: x(n)=[3,11,7,0,-1,4,2],-3<=n<=3;h(n)=[2,3,0,-5,2,1],-1<=n ...

  4. WSASocket()和socket()两个函数的区别

    winsock是socket的windows平台的实现.winsock是微软专门为windows操作系统开发的socket网络编程接口,而socket是通用网络编程接口. socket() 函数创建一 ...

  5. Oracle中nvl和nvl2这两个函数的区别

    1.nvl(value1,value2) 这个函数的意思是如果value1的值为null,那么函数返回value2的值  ,如果value1不为空,那么就返回value1的值. 需要注意的是value ...

  6. exit()与_exit()函数的区别

    注:exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出,一般都用-1或者1,标准C里有EXIT_SUCCESS和EXIT_FAILURE两个宏,用exit(EXI ...

  7. exit()与_exit()函数的区别(Linux系统中)

    注:exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出,一般都用-1或者1,标准C里有EXIT_SUCCESS和EXIT_FAILURE两个宏,用exit(EXI ...

  8. Linux中exit与_exit的区别

    在exit,_exit的区别 - exit()与_exit()函数的区别(Linux系统中)2012-03-20 15:19:53 分类: LINUX 注:exit()就是退出,传入的参数是程序退出时 ...

  9. Linux下Exit和_exit函数说明

    exit和_exit函数都是用来终止进程的.当程序执行到exit或_exit时,系统无条件的停止剩下所有操作,清除包括PCB(进程控制块)在内的各种数据结构,并终止本进程的运行.但是,这两个函数是有区 ...

最新文章

  1. php 面向对象开发 类的学习 一
  2. 过滤设置_深圳外置鱼池过滤器零售_杰蒙尼鱼池过滤器
  3. 盘点3个改变世界的AI项目,NLP/CV/BI,3个方向
  4. 点赞!一个程序员花了14小时寻找问题疫苗的流向
  5. 安卓intent发起广播事件给系统或当前app,并从系统或当前app中接收广播
  6. 用VS调试 javascript
  7. 反射修改jsessionid实现Session共享
  8. shell深井冰之linux命令行下使用豆瓣FM
  9. Win10电脑关机后立即自动重启怎么办
  10. Python Computer Vision Programming学习笔记(二)——基本的图像操作与处理
  11. 微信公众号第三方平台开发PYTHON教程 PART 5
  12. 大数据解析:程序员到底能干到多少岁?
  13. git(2)Git 基础
  14. ubuntu chm文档阅读
  15. UESTC 1903 铁路
  16. 2022 互联网中秋月饼大赏,腾讯送火腿,字节寓意圆满,你最钟爱哪款呢?
  17. 深入分析小程序与H5的区别
  18. vs 2022连接MySQL数据库
  19. tinymce编辑器之placeholder插件的实现
  20. 做html时css经常无效果,修改CSS样式无效有什么原因?

热门文章

  1. 苹果手机使用爱思助手安装ipa软件
  2. 常用算法解析------二分法
  3. ICA简介:独立成分分析
  4. 使用NVM安装NodeJS(原创 最全笔记)
  5. 分布式Session共享和单点登录实现
  6. 密码学系列之:Argon2加密算法详解
  7. Ubuntu创建Eclipse桌面快捷方式
  8. 计算机基础课程应用论文,新课标下的《计算机应用基础》课程研究论文
  9. 触动触摸脚本开发高级教程
  10. 计讯物联二次供水水池泵站监测方案,从根本上保障居民饮用水安全