学校首页  教务选课  本站首页  计算中心简介  部门工作  对外交流  C语言学习  大学计算机  PAT考试  咨询与投诉 
 首页 > C语言学习 > C语言学习讨论 > 正文 更多C语言学习讨论
C语言中return和exit的区别

2012年11月24日10:41  来源:计算中心  访问量:19472

  在C语言中,经常会遇到使用exit函数直接结束程序运行的情况,exit和return的作用有些类似,特别是在main函数中出现时,经常令人迷惑:是该用exit还是return?或是随便用哪一个都行?二者到底有何区别?

  1.exit用于在程序运行的过程中随时结束、终止程序,exit的参数是返回给OS的。main函数结束时(使用return或exit)也会隐式(即自动)地调用exit函数。
  exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件。
  exit是结束一个进程,它将删除进程使用的内存空间,同时把错误信息返回父进程,而return是返回函数值(可选,void类型的函数只return而不带值)并退出函数。

  2.return是语言级别的,它表示了调用堆栈的返回,即返回主调函数;而exit是系统调用级别的,它表示了一个进程的结束。

  3.exit的函数原型为“void exit( int status );”,其作用是退出应用程序,并将应用程序的一个状态返回给OS,这个状态标识了应用程序的一些运行信息:和机器和操作系统有关一般是 0 为正常退出、非0为非正常退出且不同的取值表示不同的退出原因(具体含义用程序设计者确定并在程序的使用手册中说明)。

  4.atexit()函数的参数是一个函数指针,函数指针指向一个没有参数也没有返回值的函数。atexit()的函数原型是:“int atexit( void (*func)(void) );”。在一个程序中最多可以用atexit()注册32个处理函数,这些处理函数的调用顺序与其注册的顺序相反,也即最先注册的最后调用,最后注册的最先调用。

  一般程序执行到 main() 的结束就完成了, 如果想让程序在结束时做一些统一的事情(自己安排的收尾工作), 可以尝试着用以下的例子去看看效果:
    #include <stdio.h>
    #include <stdlib.h>
    void f1(void) { printf("exit f1\n"); }
    void f2(void) { printf("exit f2\n"); }
    int main(void)
    {
        atexit(f1); atexit(f2);  printf("exit main\n");
        return 0;
    }

  5.在main函数里面return(0)和exit(0)的作用是一样的。在main函数中我们通常使用“return (0);”这样的方式返回一个值,但这是限定在非“void main()”这样的形式。

  exit()通常是用在子程序(函数)中用来终结程序用的(发生了程序认为无法继续运行下去的情况,程序设计者认为此时应当终止程序运行,此时只能使用exit,因为使用retrurn的结果是返回主调函数,达不到终止程序运行的目的),使用exit后程序自动结束并返回操作系统。

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


 前一条:浮点数运算中的对阶问题与精度损失 (2012-10-29)
 后一条:C语言中的左值与右值 (2013-07-01)
相关报道
·C/C++ 误区一:void main() (2011-05-19)
·C语言程序设计上机练习技巧、学习方法与注意事项 (2011-04-20)
·为什么在自己的计算机上程序可以运行,传到系统却说编译有错?——系统对C程… (2011-12-19)
·为什么在自己的计算机上程序的运行结果是对的,但传到系统却未得满分甚至是0… (2011-12-16)
·为什么同一程序使用不同的帐号上传到系统后得分不一样? (2011-12-16)
·浮点数运算中的对阶问题与精度损失 (2012-10-29)

 

◆ MOOC+SPOC

C语言程序设计MOOC
Office高级应用MOOC
大学计算机MOOC(56学时)
大学计算机MOOC(32学时)

◆ 英语工具(*=机房开放)

离线词典:有道词典(绿色版)
离线翻译:金山快译(绿色版)
* 谷歌翻译
* 百度词典/翻译/论文写作助手
* 金山词霸/翻译/写作批改
必应词典/翻译
有道词典/翻译/简历助手

◆ 重要公告

成都信息工程大学关于组织报…
DSA数据结构与算法实验室在2…
2024年度DSA数据结构与算法…
2024 年(第17届)中国大学…
2023-2024学年第2学期《Offi…
第三届“成都信息工程大学团…
20232学期非计算机类《C语言…
第二届成都信息工程大学新生…
第十五届蓝桥杯全国软件和信…
20231学期非计算机类《C语言…

◆ 校园热线

教学平台 数字图书 招生就业
学生事务 心灵之约 邮件服务
后勤管理
四川·成都市西南航空港经济开发区学府路一段24号  邮编:610225
学校值班电话:028-85966502     联系计算中心:电话028-85966005  电子邮件  留言
Copyright©成都信息工程大学计算中心 2008-2011  建议使用IE5.5,1024*768以上浏览