程序代码中退出函数exit()与返回函数return ()的区别

  •   exit(0):正常运行程序并退出程序;
  •   exit(1):非正常运行导致退出程序;
  •   return():返回函数,若在主函数中,则会退出函数并返回一值。



 解析:

1. return返回函数值,是关键字; exit 是一个函数。

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

3. return是函数的退出(返回);exit是进程的退出。

4. return是C语言提供的,exit是操作系统提供的(或者函数库中给出的)。exit是一个库函数,exit(1)表示发生错误后退出程序,exit(0)表示正常退出。在stdlib.h中exit函数是这样子定义的:void exit(int status)。这个系统调用是用来终止一个进程的,无论在程序中的什么位置,只要执行exit,进程就会从终止进程的运行。讲到exit这个系统调用,就要提及另外一个系统调用,_exit,_exit()函数位于unistd.h中,相比于exit(),_exit()函数的功能最为简单,直接终止进程的运行,释放其所使用的内存空间,并销毁在内存中的数据结构,而exit()在于在进程退出之前要检查文件的状态,将文件缓冲区中的内容写回文件。

5. return用于结束一个函数的执行,将函数的执行信息传出给其他调用函数使用;exit函数是退出应用程序,删除进程使用的内存空间,并将应用程序的一个状态返回给OS或其父进程,这个状态标识了应用程序的一些运行信息,这个信息和机器和操作系统有关,一般是 0 为正常退出, 非0 为非正常退出。

6. 非主函数中调用return和exit效果很明显,但是在main函数中调用return和exit的现象就很模糊,多数情况下现象都是一致的。

参考:http://blog.sina.com.cn/s/blog_99f5031a0101lshp.html

时间: 2024-10-21 11:37:17

程序代码中退出函数exit()与返回函数return ()的区别的相关文章

SAP程序代码中RANGE表的用法禁忌

最近经常有出现以上的SQL代码导致程序DUMP,SAP错误日志如下: 经过检查RANGE表GR_MATNR,当用于WHERE条件是,只限较小的数据量的情况(约100条左右): 若为大数据量应该用FOR ALL ENTRIES IN的语法,或者其它方式来改写. SAP程序代码中RANGE表的用法禁忌

在ASP.NET项目中的web.config文件里配置数据库连接并在程序代码中获取连接字符串

  1.在<connectionStrings> 标签里添加连接 <connectionStrings> <add name="ConnectionName" connectionString="Server=.\SQLEXPRESS;Database=DatabaseName;UserID=sa;Password=abc123" providerName="System.Data.SqlClient" />

基本用法:2《定义函数def、返回值return、元组tuple》

2 <定义函数def.返回值return.元组tuple>  [功能] 返回函数return ' '不需要立刻print,先存起来需要再print() (1)[局部变量]和[全局变量] 1 #(1)[局部变量]和[全部变量] 2 # A.[局部变量]函数内部定义,只能内部使用,外部不能使用 3 def egg(): 4 global a # 声明a是全局变量,print(a+2) 就不会报错了 5 a=108 6 print(a+1) 7 egg() 8 print(a+2) 9 10 # B

关于 html5 代码中 &quot;xxx&quot;(双引号) 和 (单引号)&#39;xxx&#39; 的区别,谈谈我的经验!

最近在学习的时候看到有人问 "find" 与 'find' 的区别,发现了很多人都说没有区别,纯属个人爱好! 于是我好奇地试验了一下,发现了不一样的结果,通过对比分析发现 '' 和 "" (单引号,双引号),还是有很大的区别地! 建议:<!--************为了防止 引号匹配错误: 单引号与双引号交叉使用*******************--> 在使用html onclick 事件属性时候乱用 单引号 /双引号 会出错的,比如: <!

C程序代码中内嵌as汇编(四、宏函数)

先来回忆下C语言中宏是怎么定义的,最基本的是定义常量:#define MAX_LEN 1024  这是最简单的常数宏定义,其中宏名按规定是要大写的,宏名在预编译时会由后面的值替代掉(预编译四大步骤:1.用宏名后面的值替换宏名:2.加载包含的头文件内容:3.判断逻辑假,并且去掉逻辑假代码:4.删除注释). C语言中宏函数定义格式:#define  FUN_NAME(a, b, c)   (函数体)   值得一提的是参数中最后一个是返回值:函数体中所有的代码都必须在一行上显示,所以需要续航符(反斜线

C#程序代码中常用的快捷键

C#中的快捷键,可以更方便的编写代码 CTRL + SHIFT + B 生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL + SHIFT + O 打开项目 CTRL + SHIFT + C 显示类视图窗口 F4 显示属性窗口 SHIFT + F4 显示项目属性窗口 CTRL + SHIFT + E 显示资源视图 F12 转到定义 CTRL + F12 转到声明 CTRL + ALT + J 对象浏览 CTRL + ALT + F1 帮助目录 CTRL + F1 动

SAP程序代码中RANGE表的用法注意点

前几天写了个程序,在读SQL代码的时候,选择条件 in 一张range table,结果导致程序DUMP,SAP的LOG如下: 错误原因:RANGE表当用于WHERE条件是,只限较小的数据量的情况(约2000条左右): 若为大数据量应该用FOR ALL ENTRIES IN的语法,或者其它方式来改写.否则会DUMP

[android]同步块代码中wait和sleep方法持有锁状态的区别

需求 最近项目中这么一个功能,希望app监听android file system,当有文件create/modify/detele时,app收到通知,把对应的变化信息告诉服务器 需求的解决方案 当我们用手机拍照时,会把拍照的文件保存在sdcard的DCIM文件夹下.当文件生成时,我们会接收到create/modify/write_close消息,我们要做的是在write_close之后,再发送消息给服务器,这样一来,当我们收到create消息时,就需要把当前线程阻塞住,直到收到write_cl

js代码中的parent,top和self有什么区别

1.parent常用在iframe和frame中的子页面访问父页面中的对象 2.top :一个页面可能会有很多层,top是指最顶层的框架 3.self :是指当前窗口