'main'函数的返回值在哪里?

时间:2014-08-21 19:55:45

标签: c function return main return-type

在C中,函数始终将其值返回给调用函数,而不是自身(如果返回类型不为空)。像,

int main()

但由于“主要”功能是由操作系统调用,因此不是功能。那么,'main'函数是谁返回它的值?当使用表达式

返回值时,值在哪里
return(0);

在节目结束时?

4 个答案:

答案 0 :(得分:4)

如前所述,这是特定于操作系统的。在UNIX系统中,它看起来像这样:

使用gcc编译程序时,它会围绕main()函数包装启动例程。此例程调用main()函数并保存其返回值。然后它调用exit()函数(您的程序也可以调用它),它会执行一些常规清理。然后,此函数再次调用_exit(),这是一个系统调用,告诉操作系统将main()函数的返回值保存在进程表中(保存有关进程的元信息)。只要另一个进程在您的进程ID(PID)上调用wait(),您的返回值就会被提供给调用进程,并且您的进程将从表中删除。

请查看此资源以获取更多信息:http://www.johnloomis.org/ece537/notes/Processes/process_environment.html

答案 1 :(得分:3)

这完全是特定于操作系统的,但通常操作系统通过

调用程序
  1. 设置程序的地址空间
  2. 在操作系统内部的某处创建新进程的记录,
  3. 启动自己的自定义函数,该函数调用main并将返回值存储在操作系统内部。
  4. 我在(3)中引用的函数通常是一个很好的老式C函数,它只是跳转到main,因此它可以从main捕获返回值,就好像它是一个普通的C函数(事实上它是)。之后,它将该值存储在OS-land中的某个位置,以便需要读取返回值的进程可以这样做。

    希望这有帮助!

答案 2 :(得分:1)

  

' main'的返回值在哪里?功能去?

它将返回到调用进程。

在POSIX兼容系统上,如果调用父进程是C程序,它至少可以通过在子进程后调用wait()waitpid()来检索其子进程的最低8位结束。

答案 3 :(得分:0)

大多数操作系统都像这样调用main:

exit(main(argc, argv, envp));