主函数返回的值错误?

Ahm*_*mad 2 c program-entry-point function

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

mel*_*ene 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错误时返回文件描述符(非负整数)。


Edw*_*nix 7

这实际上是@Brandon在评论中已经说过的内容。

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