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;
}
答案 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)