C++的“开始”,main函数浅析

前情介绍

         初学C++时,一般都会用hello world 这个示例来演示C++程序的语法及运行结果。

#include <iostream>

int main()
{
    std::cout << "Hello World!\n";
}

        那这时候肯定会有人说,为什么一定要写个 main函数?它有什么特别之处吗?

        但是这时候都会说 你只需要知道每个C++程序必须有一个名字为 main 的函数就行了,程序将从这个函数开始执行。不知道这时,大家会不会有疑问,main函数真的是必须的吗?main函数真的是开始执行的吗?它执行之前到底还干了什么事情?

问题浅析

       首先第一个问题,main函数真的是必须的吗已经由下面图片解答,下方图片是VS2022的项目属性中的一个设置选项,可以自定义程序启动时第一次启动的用户代码。意思是可以不叫 main函数这个名字,但是main函数的功能还是存在的。

第二个问题 main函数真的是开始执行的吗?

以下系列源码图片就已经解答了此问题,它不是第一个,甚至在启动顺序上都排不上号,在它前面已经有很多函数执行了。

第三个问题,在main函数之前,系统还进行了哪些动作?

这里就直接给出解答,因为有相当大一部分是操作系统完成的。

编译后的执行流程大致如下:

  1. 操作系统加载程序:操作系统加载可执行文件,并开始执行入口点函数(例如,_start)。
  2. 启动例程执行
    • 设置程序的运行环境。
    • 初始化C++运行时库。
    • 构造全局和静态对象(如果有)。
  3. 调用main函数:启动例程调用用户定义的main函数。
  4. 执行mainmain函数中的代码被执行,输出"Hello, World!"。
  5. main返回main函数返回值被传递回启动例程。
  6. 清理和退出:启动例程执行清理操作,如析构全局和静态对象,然后将返回值传递给操作系统,程序结束。

结论

        虽然main函数是C++程序的核心入口点,标志着用户代码的开始,但在实际执行过程中,main之前还有一系列由运行时库和启动例程执行的初始化步骤。因此,main并不是程序启动后第一个被执行的函数,但它是用户代码的第一个被调用的函数,起到了关键的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值