‘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
这完全是特定于操作系统的,但通常操作系统会调用一个程序
- 设置程序的地址空间,
- 在OS内部的某处创建新进程的记录,
- 启动自己的自定义函数,该函数调用
main
并将返回值存储在OS内部。
我在(3)中引用的函数通常是一个很好的老式C函数,它只是跳转到main
因此它可以从main
捕获返回值,就好像它是一个普通的C函数(事实上它是)。 之后,它将该值存储在OS-land中的某个位置,以便需要读取返回值的进程可以这样做。
希望这可以帮助!
‘main’函数的返回值在哪里?
它将返回到调用进程。
在POSIX兼容系统上,如果调用父进程是C程序,它至少可以通过在子进程结束后调用wait()
或waitpid()
检索其子进程返回值的最低8位。
大多数操作系统都像这样调用main:
exit(main(argc, argv, envp));