我以前读到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上,父进程可以使用wait
或waitpid
来获取已终止子进程的退出状态。
在 C 标准库中,执行操作的函数通常不返回真/假状态。(诸如islower
或isdigit
之类的测试可以,但它们没有任何其他效果。例如,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
。