return 和 exit

此篇文不会阐述具体的原理,而是只记录实际应用如何避免一些问题

  • 在《C语言程序设计-现代方法》第9.5章节中有这样一段说明, return语句和exit函数之间的差异是:不管哪个函数调用exit函数都会导致程序终止,return语句仅当由main函数调用时才会导致程序终止。

  • 更为抽象的解释,exit函数是程序退出,无论在什么函数中调用都会退出,程序退出时,对相应的资源如文件描述符,缓冲区等进行回收,假如main函数调用了一个函数get_number(),在get_numbe中使用了return语句,则程序从get_number中返回到main中继续执行,但是如果在get_number中调用exit,则程序会终止退出。所以在main中使用exitreturn,由于只有一层函数调用。看上去的效果是一样的

  • 有这样一个错误处理函数,如果其他函数中要求成功返回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
}
posted @ 2017-01-08 20:48  vforbox  阅读(227)  评论(2编辑  收藏  举报