百科问答小站 logo
百科问答小站 font logo



为什么大多数程序主函数成功时都return 0; 不return 1; ? 第1页

  

user avatar   bluedrum 网友的相关建议: 
      

return 0 为是Unix 时代的传来风格.

很多系统调用里-1是错误, 0是成功,如果与文件IO相关大于往往是FD或者长度.

这样一个返回值能有双重含意


user avatar   Ivony 网友的相关建议: 
      

其实不是大多数,而应该是几乎所有,,,,

原因就是0代表正确,成功完成……

而非0代表执行出错了。

尽管现代的程序一般不需要用这种拙劣的方式来传递错误信息了,例如我们有标准错误输出什么的。但是这个约定依然存在,如果你随便乱返回非零值,那么某些东西就可能认为你是异常的。


举几个Windows操作系统的栗子。

当你使用cmd执行你的程序的时候(假定你的程序是控制台程序),有一个内部命令可以根据你程序返回的错误值来决定下一步的操作,如:IF ERRORLEVEL 1 xxxxxx

这个其实是从DOS一直继承过来的一个DOS内部命令。


当你使用任务计划程序(计算机管理系统工具任务计划程序)执行你的程序的时候,如果你的程序最终的返回值不是0,则任务计划程序会认为执行失败了,可以在日志和上一次运行结果里面看到。


当然,Windows/DOS所有的外部命令如果执行失败都会返回非零值,绝大多数控制台程序在正常情况下都会返回零值,.NET控制台应用程序如果出现没有处理的异常,会返回非零值。


user avatar   timothyqiu 网友的相关建议: 
      

无论 C / C++,从 main 函数返回的效果都相当于调用 exit 函数,main 的返回值会作为传给 exit 函数的参数。

exit 对于参数的说明是这样的:

Finally, control is returned to the host environment. If the value of status is zero or EXIT_SUCCESS, an implementation-defined form of the status successful termination is returned. If the value of status is EXIT_FAILURE, an implementation-defined form of the status unsuccessful termination is returned. Otherwise the status returned is implementation-defined.
  • 如果参数为 0 或者 EXIT_SUCCESS,向外部环境报告程序运行圆满结束
  • 如果参数为 EXIT_FAILURE,向外部环境报告程序运行以失败告终
  • 如果参数为其它值,效果由实现定义

所以,return 0 是有确定语义的返回方式;而 return 1 则不具备可移植性




  

相关话题

  Rust 语言现在什么情况,为什么知乎上不怎么讨论Rust语言了呢? 
  如果“P=NP”得到证明,意味着什么? 
  目前的人工智能离可以自己给自己写代码编程还有多远? 
  在计算机科学领域,为何不使用拼音代替英文做为关键字? 
  如何评价我同学说「台式机终究会被淘汰」? 
  给你们看一下上海的政策,想请教一下编程高手,这IF语句,是无限循环还是死循环,可以跳出吗? 
  就节省编译时间来说,Precompiled Header和Pimpl范式哪个更好? 
  c语言while语句他是怎么工作怎么运行的? 
  C++ 几十年来为什么没给 break 语句加上参数? 
  学编程一年,前两天到一家公司实习,今天主动提出离开,这两天是我第一次感觉到压力。我该怎么办? 

前一个讨论
如果你认同“上兵伐谋”的话,那么取何谋才能加速美国的衰落?
下一个讨论
如何看待马里科帕县警长领衔的调查团队发布声明称奥巴马的出生证明系伪造?





© 2025-05-23 - tinynew.org. All Rights Reserved.
© 2025-05-23 - tinynew.org. 保留所有权利