return 和 exit
此篇文不会阐述具体的原理,而是只记录实际应用如何避免一些问题
- 在《C语言程序设计-现代方法》第9.5章节中有这样一段说明, 
return语句和exit函数之间的差异是:不管哪个函数调用exit函数都会导致程序终止,return语句仅当由main函数调用时才会导致程序终止。 - 更为抽象的解释,
exit函数是程序退出,无论在什么函数中调用都会退出,程序退出时,对相应的资源如文件描述符,缓冲区等进行回收,假如main函数调用了一个函数get_number(),在get_numbe中使用了return语句,则程序从get_number中返回到main中继续执行,但是如果在get_number中调用exit,则程序会终止退出。所以在main中使用exit和return,由于只有一层函数调用。看上去的效果是一样的 - 有这样一个错误处理函数,如果其他函数中要求成功返回0,错误返回-1,此时调用该函数后将会退出程序
 
/**
 * error_handling - 错误处理,直接将错误信息发送到stderr
 * @message:    错误提示信息
 */
void error_handling(const char *message)
{
    if (errno) {
        perror(message);
    } else {
        printf("ERROR: %s\n", message);
    }
    exit(EXIT_FAILURE);
}
- 调用
 
/**
 * ftp_serve_start_data_conn - 创建到客户机的一条数据连接
 * @sock_control:   接收端套接字描述符
 *
 * Return:  成功返回数据连接的套接字,失败返回 -1
 */
int ftp_serve_start_data_conn(int sock_control)
{
    char buf[1024];
    int wait, sock_data;
    /* 接收数据 */
    if (0 > recv(sock_control, &wait, sizeof(wait), 0))
    {
        error_handling("Error while waiting");
    }
    /* .... ... */
- 正确的处理方式
 
if (0 > recv(sock_control, &wait, sizeof(wait), 0))
{
    perror("Error while waiting");
    return -1
}
												
											return 和 exit的更多相关文章
- return和exit函数的区别
		
在上Linux课的时候,老师提到一句,调用vfork产生的子进程就是为了使用exec族函数来执行其他的代码逻辑. 在子进程退出的时候有两种方式,exit和exec族函数,不能使用return,为什么不 ...
 - 关于return和exit
		
关于return和exit 在子进程退出的时候有两种方式,exit和exec族函数,不能使用return,为什么不能用return呢,exit改成return 会出现父子进程又各自重复开始进行. 1. ...
 - 理解 break, continue, return 和 exit
		
你们知道 “break”, “continue”, “return” 和 “exit”的作用吗? 它们是功能强大的语言结构体.下面通过一个测试函数来说明它们之间的不同. 1 2 3 4 5 6 7 8 ...
 - Linux编程return与exit区别
		
Linux编程return与exit区别 exit 是用来结束一个程序的执行的,而return只是用来从一个函数中返回. return return 表示从被调函数返回到主调函数继续执行,返回时可附 ...
 - DevC++ return 1 exit status
		
当使用DevC++时编译运行程序出现 return 1 exit status 有可能是因为有在运行的命令窗口未关闭.
 - Windows下return,exit和ExitProcess的区别和分析
		
通常,我们为了使自己的程序结束,会在主函数中使用return或调用exit().在windows下还有ExitProcess()和TerminateProcess()等函数. 本文的目的是比较以上几种 ...
 - C++中的return和exit区别
		
在main函数中,return和exit经常混用,两者的一个区别:return会执行statck unwinding,而exit不会.如果触发了信号,exit也同样不会做stack unwinding ...
 - oracle 存储过程循环体中的return和exit区别:
		
oracle 存储过程循环体中的return和exit区别: (1) return 跳出整个循环,终止该循环, 后面的不再执行. 相当于 Java 中的break; (2) exit ...
 - return 与 exit() 的区别
		
return是一个关键字,返回函数值:exit()是一个函数: return是语言级的:exit()是操作系统提供的函数: return表示函数退出:exit()表示进程退出: 非主函数中调用retu ...
 - return die exit 常用
		
die()停止程序运行,输出内容exit是停止程序运行,不输出内容return是返回值die是遇到错误才停止exit是直接停止,并且不运行后续代码,exit()可以显示内容.return就是纯粹的返回 ...
 
随机推荐
- [转]maven插件的开发
			
原文链接: http://clojure.iteye.com/blog/1124188 另一篇文章 http://blog.csdn.net/csfreebird/article/details/77 ...
 - ionic移动开发入门
			
学习资料:http://www.ionic.wang http://www.ionicframework.com/
 - Python学习_数据处理split方法
			
用open方法导入文件“sketch.txt”后,用split()方法进行分割: >>> import os >>> os.chdir('C:/Python33/H ...
 - VS2012 独占编辑 设置
			
用VS2008建立的项目就有(禁止其他用户签出和签入) 为什么VS2012的项目就没有了呢??(管理员说他什么都没设置)VS2012: 两个项目同样是用VS2012打开的,而第一个是用VS2008创建 ...
 - keilkill.bat
			
一.批处理文件 批处理文件是无格式的文本文件,它包含一条或多条命令.它的文件扩展名为 .bat 或 .cmd.在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文 ...
 - POJ 2252 Dungeon Master   三维水bfs
			
题目: http://poj.org/problem?id=2251 #include <stdio.h> #include <string.h> #include <q ...
 - BZOJ1861[ZJOI2006]Book书架
			
Description 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书,看完后放回书柜然后再拿下 ...
 - 为你的TabBar添加Badge-感谢分享
			
实现过程 首先定义了三种Badge类型 typedef NS_ENUM(NSUInteger, CustomBadgeType){ kCustomBadgeStyleRedDot, //显示普通红点类 ...
 - 容斥原理算法总结(bzoj 2986 2839)
			
容斥原理是一个从小学就开始学习的算法.但是很多难题现在都觉得做的十分吃力. 容斥原理大概有两种表现形式,一种是按照倍数进行容斥,这个东西直接用莫比乌斯函数就可以了. #include<iostr ...
 - 想学ps的,这全是精华,拿走不谢!!!