我以前读过C语言中的0表示假,而1表示真。 并且已经注意到main函数返回0,但是为什么呢?如果我所有的代码都成功运行,则应返回true(1)。 另一个相关的问题,我仍然不明白谁可以使用可返回值?因为没有其他函数在程序内部调用主函数,所以没有人知道我的程序是否运行良好。 我有点困惑。
答案 0 :(得分:8)
如果main
的返回值被解释为布尔值,那么您的逻辑将是有意义的,但事实并非如此。从初始调用返回到main
就像调用exit
函数:它向正在运行的系统报告终止状态。
标准C指定3种便携式退出状态:
0
,表示成功EXIT_SUCCESS
,也表示成功EXIT_FAILURE
,表示失败(最后两个是在<stdlib.h>
中定义的宏。)
在Unix上,允许使用任何8位值(0 .. 255)。所有非零值都将解释为错误代码。对于任何给定的数字,没有通用的约定,只是0
代表成功,其他代表某种失败。
关于谁可以使用返回值:在Unix上,父进程可以使用wait
或waitpid
来获取终止子项的退出状态。
在C标准库中,执行动作的函数通常不返回true / false状态。 (诸如islower
或isdigit
之类的测试可以,但是它们没有其他作用。)例如,remove
(删除文件)成功返回0
和-1
出错。这也是Unix系统调用的常见模式。例如,open
成功返回文件描述符(非负整数),错误返回-1
。
答案 1 :(得分:7)
这基本上是@Brandon在评论中所说的。
main
应该返回程序的exit/error code。在Unix约定中,0
用于表示没有错误(错误值为“ false”)。然后使用正值表示存在错误以及错误是什么。
答案 2 :(得分:2)
C语言 认为true
(非零)或false
(零)与操作系统的值之间存在差异用于表示程序正常终止。
严格来说,C程序应以EXIT_SUCCESS
退出(正常终止)或EXIT_FAILURE
(退出异常)退出。 EXIT_SUCCESS
将映射到基础平台用来指示成功的任何代码,可能为0
,也可能不是。
答案 3 :(得分:1)
这实际上与您在程序完成时询问的问题有关。
情况1:
您失败了吗?
情况2:
您通过了吗?
在第一种情况下,“好的程序”将返回false(又称零)
在第二种情况下,“好的程序”将返回true(也称为非零)。
共识是使用案例1,即“您失败了吗?”。因此,非失败程序将返回零,表示“我没有失败”。
这种方法的好处是非零值可以用来表示不同类型的故障,而零总是“无故障”。