main()函数的返回值是什么?

4

请问在 C 语言中,main() 函数的返回值应该是返回到哪里呢?


2
大量重复,例如https://dev59.com/uEzSa4cB1Zd3GeqPn5rt - Paul R
它会将返回值发送给启动它的程序。如果你是从命令行启动的,那么返回值就会发送到命令行。如果你是从集成开发环境(如Visual Studio)启动的,那么返回值就会发送到Visual Studio。如果你是从桌面上双击可执行文件启动的...那么返回值就会发送给生成该进程的Windows进程。 - Gillespie
5个回答

9

C语言的main函数返回一个整数...这个整数作为退出状态码传递给执行它的程序(也就是父进程)。

通常情况下,在大多数操作系统中,退出状态码0表示程序正常运行(没有真正的错误),非零则表示出现问题,程序不得不异常退出。


3
可能不会进入操作系统,而是进入命令壳。 - jason
2
更普遍地说,它涉及到调用可执行文件的进程。 - Dave Costa
嗯,没错。让我们来修复它。 - Platinum Azure
1
@Jason,它是如何在不经过操作系统的情况下从一个进程传递到 shell 的? - David Heffernan
1
@Platinum 它不会返回给父进程。当进程死亡时,操作系统会收集返回代码。因此,即使父进程已关闭,其他感兴趣的进程仍然可以读取返回值。 - David Heffernan
显示剩余2条评论

4

如果使用main()函数作为程序的退出状态码,则返回值是什么。

在shell中,您可以使用$?获取程序的退出状态,例如:

./prog
exit_status=$?

2

根据C99标准:

5.1.2.2.3 程序终止

1.如果 main 函数的返回类型与 int 兼容,从初始调用 main 函数返回相当于使用 main 函数返回的值调用 exit 函数;

然后

7.20.4.3 exit 函数

5.最后,控制权返回给主机环境。如果状态值为零或 EXIT_SUCCESS,则以实现定义的形式返回状态 成功终止。如果状态值为 EXIT_FAILURE,则以实现定义的形式返回状态 不成功终止。否则返回的状态是实现定义的。

简而言之,main 的返回值以实现定义的形式返回到主机环境中。


0
一个通用的语句是:函数将一个值返回给主机环境。 所以,main()函数将返回值给任何托管该代码片段或操作系统的程序或shell。
返回值0被认为是成功执行。

0

main函数可以在任何时候返回其值。您只需编写:

return my_return_value;

游戏结束了。


@Jason 就像我说的那样,在任何时候都可以。一旦完成,它就会返回其返回值。 - David Heffernan
@Jason,您是否理解问题是关于一个进程如何读取另一个进程的返回值? - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接