主函数返回的值错误?

时间:2019-06-25 19:38:16

标签: c function main

我以前读过C语言中的0表示假,而1表示真。 并且已经注意到main函数返回0,但是为什么呢?如果我所有的代码都成功运行,则应返回true(1)。 另一个相关的问题,我仍然不明白谁可以使用可返回值?因为没有其他函数在程序内部调用主函数,所以没有人知道我的程序是否运行良好。 我有点困惑。

4 个答案:

答案 0 :(得分:8)

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

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

  • 0,表示成功
  • EXIT_SUCCESS,也表示成功
  • EXIT_FAILURE,表示失败

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

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

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


在C标准库中,执行动作的函数通常不返回true / false状态。 (诸如islowerisdigit之类的测试可以,但是它们没有其他作用。)例如,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,即“您失败了吗?”。因此,非失败程序将返回零,表示“我没有失败”。

这种方法的好处是非零值可以用来表示不同类型的故障,而零总是“无故障”。