使用exit(1)从函数返回

时间:2009-12-29 04:42:14

标签: c++ c

linux gcc 4.4.1 C99

我只是想知道使用以下技术是否有任何优势。我注意到我正在阅读一些代码,我正在读取退出编号的值,这个代码片段中显示了这个值。

/* 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;
}

7 个答案:

答案 0 :(得分:23)

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

返回仅返回您当前所在的函数,而不是整个程序。

答案 1 :(得分:6)

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

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

答案 2 :(得分:4)

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

答案 3 :(得分:3)

我认为你不想退出整个节目,对吗?

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

/* 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 */
  }

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

答案 4 :(得分:2)

您问我们是否应该从您的功能中返回错误代码?

这取决于您希望对用户提供多少信息。如果你想像软件一样行动通常行动并弹出一个说

的模态对话框
  

发生了一件坏事!

然后就不需要返回代码了。

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

  

我无法打开“foo.bar”。

     

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

答案 5 :(得分:2)

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

exec foo 如果$$ eq'0':    回声“成功” elif $$ eq'2':     exec error-recovery-script

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

答案 6 :(得分:0)

如果想要根据测试条件返回值,则更喜欢使用return而不是exit。

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

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