‘main’函数的返回值在哪里?

在C中,函数总是将其值返回给调用函数,而不是自身( 如果返回类型不是void )。 喜欢,

int main() 

但由于操作系统调用了main ‘函数,因此它不是函数 。 那么,’main’函数是谁返回它的值? 当使用表达式返回值时,值的位置

 return(0); 

在节目结束?

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

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

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

这完全是特定于操作系统的,但通常操作系统会调用一个程序

  1. 设置程序的地址空间,
  2. 在OS内部的某处创建新进程的记录,
  3. 启动自己的自定义函数,该函数调用main并将返回值存储在OS内部。

我在(3)中引用的函数通常是一个很好的老式C函数,它只是跳转到main因此它可以从main捕获返回值,就好像它是一个普通的C函数(事实上它是)。 之后,它将该值存储在OS-land中的某个位置,以便需要读取返回值的进程可以这样做。

希望这可以帮助!

‘main’函数的返回值在哪里?

它将返回到调用进程。

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

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

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