zoukankan      html  css  js  c++  java
  • 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
    ", 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
    }
    
    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态
    
    如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦   
    
    如果您对文章内容有任何疑问, 可以通过评论或发邮件的方式联系我:vforbox@gmail.com
  • 相关阅读:
    触摸屏、X11去掉鼠标
    RPM验证与数字签名(Verify/Signature)
    GPG入门
    DIY的RPM包怎么签名呢
    DIY的RPM包怎么签名呢 How to sign your custom RPM package with GPG key
    iOS开发基础知识--碎片40
    iOS开发基础知识--碎片39
    iOS开发基础知识--碎片38
    iOS开发基础知识--碎片37
    iOS开发基础知识--碎片36
  • 原文地址:https://www.cnblogs.com/vforbox/p/6262570.html
Copyright © 2011-2022 走看看