在C语言中,函数总是将其值返回给调用函数而从不返回给自身(如果返回类型不是void则)。如,
int main()
但是由于'main'函数是操作系统调用的,因此不是函数。那么,"main"函数返回它的值是谁呢?当使用表达式
返回时,值去了哪里?return(0);
在节目的最后?
这完全是特定于操作系统的,但通常操作系统通过
调用程序- 设置程序地址空间,
- 在OS内部创建一个新进程的记录,
- 启动自己的自定义函数,调用
main
并将返回值存储在OS内部。
我在(3)中提到的函数通常是一个很好的老式C函数,它只是跳到main
,所以它可以从main
捕获返回值,就好像它是一个普通的C函数(实际上是)。之后,它将该值存储在操作系统的某个地方,以便需要读取返回值的进程可以读取。
希望这对你有帮助!
如前所述,这是特定于操作系统的。在UNIX系统中,它看起来像这样:
当您使用gcc编译程序时,它会围绕main()
函数封装一个启动例程。这个例程调用main()
函数并保存其返回值。然后,它调用exit()
函数(您的程序也可能调用该函数),完成一些一般的清理工作。这个函数然后再次调用_exit()
,这是一个系统调用,告诉操作系统将main()
函数的返回值保存在进程表中(保存有关进程的元信息)。一旦另一个进程在你的进程id (PID)上调用wait()
,你的返回值就会给调用进程,你的进程就会从表中删除。
查看此资源获取更多信息:http://www.johnloomis.org/ece537/notes/Processes/process_environment.html
'main'函数的返回值在哪里?
返回给调用进程。
在POSIX兼容的系统上,如果调用父进程是C程序,它至少可以通过在子进程结束后调用wait()
或waitpid()
来检索其子进程返回值的最低8bit。
大多数操作系统这样调用main:
exit(main(argc, argv, envp));