c语言 - 主函数中的返回值错误?



我以前读到C语言中的0是指假,而1是真。 并且注意到 main 函数返回 0,但为什么会这样呢?如果我的所有代码都成功运行,它应该返回 true (1)。 另一个相关的问题,我仍然无法理解谁可以使用可返回值?由于没有其他函数在我的程序中调用 main 函数,所以没有人可以知道我的程序是否运行良好。 我有点困惑。

如果main的返回值被解释为布尔值,你的逻辑是有意义的,但事实并非如此。从对main的初始调用返回类似于调用exit函数:它向您正在运行的系统报告终止状态。

标准 C 指定 3 种便携式设备退出状态:

  • 0,表示成功
  • EXIT_SUCCESS,也表示成功
  • EXIT_FAILURE,表示故障

(最后两个是<stdlib.h>中定义的宏。

在 Unix 上,允许任何 8 位值 (0 .. 255)。所有非零值都被解释为错误代码。对于任何给定的数字的含义,没有普遍的约定,只是0代表成功和其他任何某种失败。

至于谁可以使用返回值:在Unix上,父进程可以使用waitwaitpid来获取已终止子进程的退出状态。


在 C 标准库中,执行操作的函数通常不返回真/假状态。(诸如islowerisdigit之类的测试可以,但它们没有任何其他效果。例如,remove(删除文件)在成功时返回0,在出错时返回-1。这也是 Unix 系统调用的常见模式。对于 exmple,open在成功时返回文件描述符(非负整数),在出错时返回-1

这基本上是@Brandon已经在评论中所说的。

main应该返回程序的退出/错误代码。在 Unix 约定中,0用于指示没有错误(错误值为"false")。然后使用正值来指示存在错误以及错误是什么。

这实际上只是关于您在程序结束时提出的问题类型。

案例1:

你失败了吗?

案例2:

你通过了吗?

在第一种情况下,"好程序"将返回 false(又名零)

在第二种情况下,"好程序"将返回 true(也称为非零)。

共识是使用案例1,即"你失败了吗?因此,一个非失败的程序返回零来表示"我没有失败"。

这种方法的好处是非零值可用于表示不同类型的故障,而零始终是"无故障">

C语言认为true(非零)或false(零)与操作系统用于指示正常程序终止的值之间存在差异。

为了严格正确,C 程序应以EXIT_SUCCESS代码退出正常程序终止或EXIT_FAILURE代码表示异常终止。EXIT_SUCCESS将映射到底层平台用于指示成功的任何代码,这些代码可能是也可能不是0

相关内容

  • 没有找到相关文章

最新更新