main函数的return

  • Post author:
  • Post category:其他


最近的一段时间在return这个关键字进行了一点的探究,主要是涉及到调用return之后函数会进行什么操作。


return

是一个关键字,调用

return

会进行函数的返回,将后面的参数返回给调用者(main函数也是被调用的),并销毁调用堆栈。

以上是return函数的作用,接下来主要看一下main函数的

return

之后会发什么。测试代码如下:

int main()
{
    return 0;
}

进行单步调试会发现,main函数

return

后(这时main函数的堆栈已经被销毁),会返回到

invoke_main()

函数内,并执行下一条语句,invoke_main()函数如下:

   static int __cdecl invoke_main() throw()
    {
        return main(__argc, __argv, _get_initial_narrow_environment());
    }

可见

main()

函数是被

invoke_main()

函数调用的,之后

invoke_main()

再次返回。

这里写图片描述

可以看到,

invoke_main()

也是被调用的,调用者函数是

__scrt_common_main_seh() throw()

,使用整形

main_resul

来接受

invoke_main()

函数的返回值,在图片最上方的注释可以知道之前的初始化已经完成,开始调用main函数。之后进行退出操作:

进入

__scrt_is_managed_app()

函数

这里写图片描述

上面的函数执行完成之后会返回一个

false

这里写图片描述

由于返回的是

false

,取反后条件成立,会执行

exit(main_result)

,即退出进程,退出码为

main_result

以上便是

main()

从调用return到进程退出的整个过程,有什么不正确的地方希望大家指出,加以修改。



版权声明:本文为xiaozuo666原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。