(面试题)main函数在开始前或结束后是否会执行其他的代码?

本文解析了程序执行的主要流程,包括main函数开始前的准备工作如设置栈指针、初始化静态及全局变量等内容,以及程序结束后的清理工作,如执行atexit注册的函数和静态全局对象的析构过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开始前和结束后都是可以执行其他代码的。


main函数开始前干的事情

1.设置栈指针
2.初始化static静态和global全局变量,即data段的内容
3.将未初始化部分的赋初值:数值型short,int,long等为0,bool为FALSE,指针为NULL,等等,即.bss段的内容
4.运行全局构造器,估计是C++中构造函数之类的吧
5.将main函数的参数,argc,argv等传递给main函数,然后才真正运行main函数


结束之后


执行   atexit
静态和全局对象析构函数


代码

class Base
{
public:
	Base()
	{
	}
	~Base()
	{
	}
};
Base b;
void exitFun()
{
}
void main()
{
     // do sth....
     atexit(exitFun);
}

以上程序运行顺序是,执行Base的构造,执行main,执行exitFun,执行Base的析构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值