C语言中return和exit的区别

1,exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的。main函数结束时也会隐式地调用exit函数。exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件。exit是结束一个进程,它将删除进程使用的内存空间,同时把错误信息返回父进程,而return是返回函数值并退出函数
2,return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。
3,exit函数是退出应用程序,并将应用程序的一个状态返回给OS,这个状态标识了应用程序的一些运行信息。
4,和机器和操作系统有关一般是 0 为正常退出 非0 为非正常退出
5,void exit(int status);
6,atexit()函数的参数是一个函数指针,函数指针指向一个没有参数也没有返回值的函数。atexit()的函数原型是:int atexit (void (*)(void));在一个程序中最多可以用atexit()注册32个处理函数,这些处理函数的调用顺序与其注册的顺序相反,也即最先注册的最后调用,最后注册的最先调用。

一般程序执行到 main() 的结束就完成了, 如果想在程序结束时做一些事情, 可以尝试着用这个函数.

 

void f1(void)  
{
printf("exit f1/n");
}

void f2(void)
{
printf("exit f2/n");
}

int main()
{
atexit(f1);
atexit(f2);
printf("exit main/n");
return 0;
}



return是返回调用函数,exit是退出进程,
你可以
man 3 exit
return是从A城市中的x小区到y小区,  
Exit—走出A城

 

在main函数里面return(0)和exit(0)是一样的,子函数用return返回;而子进程用exit退出,调用exit时要调用一段终止处理程序,然后关闭所有I/O流。

exit本身不是系统调用,而是一个C标准库的函数而已,在stdlib里面,系统调用是exit内部实现去完成的。

 

在main函数中我们通常使用return (0);这样的方式返回一个值。

但这是限定在非void情况下的也就是void main()这样的形式。

exit()通常是用在子程序中用来终结程序用的,使用后程序自动结束跳会操作系统。

但在如果把exit用在main内的时候无论main是否定义成void返回的值都是有效的,并且exit不需要考虑类型,exit(1)等价于return (1)

MS的msdn中关于atexit的help如下:

Processes the specified function at exit.

int atexit(void (__cdecl *func )( void )  


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为IoT平台NB编解码插件开发详细教程【下篇】

上篇文章介绍了编解码开发汇总的环境搭建、Profile说明和插件编写,本篇教程就插件打包、插件质检和插件签名详解。 目录 四、插件打包 五、插件质检 六、插件签名 七、附件 四、插件打包 1、新建package文件,包含一个“preload”子文件夹&#xff…

【PostGIS】PostgreSQL15+对应PostGIS安装教程及空间数据可视化

一、PostgreSQL15与对应PostGIS安装 PostgreSQL15安装:下载地址PostGIS安装:下载地址(选择倒数第二个) 1、PostgreSQL安装 下载安装包;开始安装,这里使用默认安装,一直next直到安装完成&…

系统没有远程桌面,如何安装远程桌面

From: http://blog.sina.com.cn/s/blog_53657b280100avdb.html 系统没有远程桌面,如何安装远程桌面 可能是远程桌面对应的组件文件被删除,或是相关服务被停止而造成的,先单击“开始/运行”,输入:regsvr 32remotepg.dll并回车注…

su su - sudo

1.su只是切换了root身份,但是shell环境仍然是普通用户的shell,su切成root后,pwd工作目录仍然是普通用户的工作目录 2.su - 用户和shell环境一起切换到了root身份了。以root身份登录,执行实际用户login以后的所有操作(包…

React实现图片自适应

数据格式 [1xxxx,2xxxx,3xxxx,4xxxx,5xxxx,6xxxx,7xxxx,8,xxxx,9xxxx] 运行效果 代码部分 <divgutter{24}style{{width: 100%,display: flex,justifyContent: space-between,flexWrap: wrap ,}}>{item.imgList &&item.imgList.map((itemList, index) > (<…

上交大计算机复试机师难不难,本科复旦,考研上海交大复试第一,我感觉难度并不大...

我本人去年考研上海交大凯原法学院法学硕士&#xff0c;初试370分&#xff0c;排名第四。复试182分&#xff0c;排名第一。本科复旦&#xff0c;有过转专业经历因此法学院课程只学了3年&#xff0c;比较匆忙&#xff0c;基础不算好。2020年国家法律职业资格考试和考研同时备考&…

C与C++中的extern与static、extern C与__cplusplus的作用

一、概述 以C语言编写的源文件后缀名为.c&#xff0c;以C语言编写的源文件后缀名为.cpp&#xff0c;C支持函数的重载&#xff0c;C和C编译器对函数的编译处理是不完全相同。C编译后的函数一般是以函数名和形参类型来命名&#xff0c;C则是直接利用函数名进行命名。 假设有函数…

共谋节点两个单列表

题目&#xff1a;输入两个单链表。找出公共结点。 思路&#xff1a;若两个单链表有公共结点。其形状必然为“Y”型&#xff0c;也就是说公共结点后的全部结点都是同样的。我们首先获得两个链表的长度。求得长度之差为n&#xff0c;再定义两个指针分别指向两个链表首部&#xff…

bzero, memset ,setmem 区别

From: http://blog.csdn.net/agathe/article/details/6066157 bzero 原型&#xff1a; extern void bzero(void *s, int n);用法&#xff1a; #include <string.h>功能&#xff1a;置字节字符串s的前n个字节为零。 说明&#xff1a;bzero无返回值。 举例&am…

OPENCV2.2移植说明

OPENCV2.2移植说明 系统&#xff1a;Ubuntu10.10  编译OPENCV2.2 reference URL: http://opencv.willowgarage.com/wiki/InstallGuide  安装库&#xff1a; apt-get install build-essential cmake pkg-config libpng12-0 libpng12-dev libpng-dev li…

前端问题记录1:debounce is not a function

目录 项目场景&#xff1a; 问题描述&#xff1a; 原因分析&#xff1a; 解决方案&#xff1a; 项目场景&#xff1a; 问题描述&#xff1a; 原因分析&#xff1a; 变量重名 解决方案&#xff1a; 变量重名 关注我 一起进入前端学习群 谢谢

计算机word求差函数,表格里怎么自动求差/怎样在word2010表格中求差

如何在Excel表格中求差你这15分貌似很好赚啊怎样在word2010表格中求差一步&#xff1a;打开Excel&#xff0c;单击第一排&#xff0c;第三个“格”&#xff0c;也就C1&#xff0c;在C1中输入“A1-B1”&#xff1b;第二步&#xff1a;这个公式的意思就是说&#xff1a;A1-B1C1&a…

Linux 使用fcntl c_cc[VMIN] c_cc[CTIME]设置串口阻塞与非阻塞读取数据

一、概述 Linux串口非常灵活&#xff0c;可以根据需要配置成标准串口和自定义串口模式&#xff0c;就Linux 串口读取数据来说&#xff0c;有有两种主要方式&#xff1a;阻塞与非阻塞。 阻塞&#xff1a;一直等待数据&#xff0c;直到退出条件成立&#xff1b;非阻塞&#xff…

CSS3选择器(二)--表单

:enabled 选择可用状态的表单元素 :disabled 选择不可用状态的表单元素 :checked 复选框、单选框选中状态的选项 ::selection 用来匹配突出显示的文本(用鼠标选择文本时的文本)。 :read-only 用来指定处于只读状态元素的样式.即元素中设置了“readonly’readonly’” :read…

Linux Shell 通配符、元字符、转义符使用实例介绍

From: http://www.cnblogs.com/chengmo/archive/2010/10/17/1853344.html 说到shell通配符&#xff08;wildcard&#xff09;&#xff0c;大家在使用时候会经常用到。下面是一个实例&#xff1a; ?1?1234[chengmolocalhost ~/shell]$ lsa.txt b.txt c.old#2?1234[chengmo…

ant design model实现图片预览

代码部分 <divgutter{16}style{{width: 100%,display: flex,justifyContent: space-between,flexWrap: wrap ,}}>{detailMsg.imgList &&detailMsg.imgList.map((item, index) > (<div style{{ width: 30% }} key{index} onClick{() > this.handleClick(…

VMware Workstation Pro 无法在Windows 上运行的 解决办法

一、问题描述 国庆期间window10来了一次更新&#xff0c;导致VMware Workstation 无法在windows上运行&#xff0c;我的虚拟机版本是VMware Pro14。有两种方法解决该问题&#xff0c;第一种是直接卸载新安装的windows安装包&#xff0c;然后重启。第二种方式是升级VMware到最新…

机器学习之深度学习

本文基于台大机器学习技法系列课程进行的笔记总结。 一、主要内容 topic 1 深度神经网络结构 从类神经网络结构中我们已经发现了神经网络中的每一层实际上都是对前一层进行的特征转换&#xff0c;也就是特征抽取。一般的隐藏层&#xff08;hidden layer&#xff09;较少的类神…

sockaddr和sockaddr_in的区别

From: http://www.it165.net/pro/html/201211/4066.html 初学者很容易对二者有困惑的感觉&#xff0c;下面来讲一下二者的区别。 sockaddr是在头文件 /usr/include/bits/socket.h 中定义的&#xff0c;如下&#xff1a; view sourceprint?1.struct sockaddr2.{3.__SOCKADDR_C…

[react] 什么时候使用状态管理器?

[react] 什么时候使用状态管理器&#xff1f; 1用户的使用方式复杂 2.不同身份的用户有不同的使用方式&#xff08;比如普通用户和管理员&#xff09; 3.多个用户之间可以协作 4.与服务器大量交互&#xff0c;或者使用了WebSocket 5.View要从多个来源获取数据 从组件角度看 1.…