为什么我们从main()返回时遵循相反的约定?

Laz*_*zer 4 c c++ return-value

我已经完成了这个这个,

但我在这里问的问题是为什么被0认为是Success

我们总是联系0在一起false,不是吗?

Joh*_*itb 20

因为失败案例多于成功案例.

通常,我们成功的原因只有一个(因为我们成功了:)),但是有很多原因导致我们失败.所以0意味着成功,其他一切意味着失败,价值可以用来报告原因.

对于代码中的函数,这是不同的,因为您是指定接口的函数,因此只需使用bool它就足够了.因为main,有一个固定的退货界面,可能有程序只报告成功/失败,但其他程序需要更精细的错误报告.为了满足所有这些,我们将有多个错误案例.

  • 就个人而言,出于同样的原因,我也使用非零作为内部API的失败指示器.然后,而不是问"我没有成功"的问题?我问的问题是"我失败了吗?" 对于错误代码,True/False没有语义含义. (2认同)

Duc*_*uck 5

我必须对约翰内斯的回答嗤之以鼻.True 0用于成功,因为只有1个成功的结果,而可能有许多不成功的结果.但我的经验是,返回码也有少做的原因失败比水平故障.

回到批处理编程的时代,通常有返回代码的约定,允许整个执行流的某些自动化.因此返回代码4可能是一个警告,但下一个工作可能会继续; 8可能意味着工作流应该停止; 12可能意味着发生灾难性事件,应通知消防部门.

同样,批次会留出一些返回代码范围,以便整个批处理流可以分支.例如,如果更新程序返回XX,则批处理可能会跳过备份步骤,因为没有任何更改.

返回代码作为失败的原因并不是那么有用,当然也不像日志文件,核心转储,控制台警报等等.我从未见过一个返回XX的系统,因为例如"找不到这样的文件".