【问题标题】:using exit(1) to return from a function使用 exit(1) 从函数返回
【发布时间】:2009-12-29 04:42:13
【问题描述】:

linux gcc 4.4.1 C99

我只是想知道使用以下技术是否有任何优势。我注意到我正在阅读一些代码,退出号的值上升了,如这段代码 sn-p 所示。

/* This would happen in 1 function */
if(test condition 1)
{
    /* something went wrong */
    exit(1);
}

if(test condition 2)
{
    /* something went wrong with another condition*/
    exit(2);
}

或执行以下操作并返回:

/* This would happen in 1 function */
if(test condition 1)
{
    /* something went wrong */
    return;
}

if(test condition 2)
{
    /* something went wrong with another condition*/
    return;
}

【问题讨论】:

    标签: c++ c


    【解决方案1】:

    exit() 退出你的整个程序,并报告你传递给它的参数。这允许任何运行你的程序的程序找出它错误退出的原因。 (1 可能意味着无法连接到数据库,2 可能意味着意外参数等)。

    Return 只返回你所在的当前函数,而不是整个程序。

    【讨论】:

      【解决方案2】:

      return 基本上会从函数返回并适当调整堆栈指针以执行下一条指令,而exit 将导致程序本身终止。

      在函数中使用exit() 表示致命错误,程序无法恢复和继续,因此必须终止。

      【讨论】:

        【解决方案3】:

        exit 不会从函数返回。它将退出整个程序

        【讨论】:

          【解决方案4】:

          我不认为你想退出整个程序,对吧?

          所以只要从函数中返回就可以了。

          /* This would happen in 1 function */
           if(test condition 1)
           {
            /* something went wrong */
            return; /*return type must be void in this case */
           }
          
           if(test condition 2)
           {
              /* something went wrong with another condition*/
             return; /*return type must be void in this case */
            }
          

          你也可以显式指定函数的返回类型,并使用返回值来判断一切是否正常。

          【讨论】:

            【解决方案5】:

            您是在问我们是否应该从您的函数中返回错误代码?

            这取决于您希望为用户提供的信息量。如果你想表现得像软件一样,通常会弹出一个模态对话框,上面写着

            发生了不好的事情!

            那么就不需要返回码了。

            但是,如果您希望您的软件对您的用户有用并让他们知道发生了什么,那么您最好提供某种诊断信息(至少是错误代码)。然后你可以弹出一条消息说:

            我无法打开“foo.bar”。

            这个文件存在吗?你有读取权限吗?它在网络共享上吗?也许我应该再试一次?

            【讨论】:

              【解决方案6】:

              通常这是为了让运行您的程序的程序可以做出一些明智的决定。 例如,如果您的程序 foo 周围有一个包装脚本,那么它可以检查 使用变量 $$ 退出参数并更改执行路径:

              执行 foo 如果 $$ eq '0': 回声“成功” elif $$ eq '2': 执行错误恢复脚本

              或者,您自己也可以执行 echo $$ 来查看程序的退出代码。

              【讨论】:

              • 我认为你的意思是 $!。 $$ 是当前 shell 的 pid,而 $!是最后一条命令的返回状态。
              • 我们俩都错了 :) 它的 $?但你是对的 $$ 是当前 shell 的 pid
              【解决方案7】:

              如果想法是根据测试条件返回值,最好使用return而不是exit。

              要返回 1,而不是 exit(1),请使用 return 1。

              没有发布原因,因为在这个link中有详细的讨论。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2014-01-21
                • 1970-01-01
                • 2014-05-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-05-20
                相关资源
                最近更新 更多