在main函数执行之前和执行之后执行的方法<转载>

本文深入探讨了程序从启动到main函数执行前后的内部机制,包括系统资源初始化过程、全局变量准备及函数调用顺序等内容,并提供了具体的代码示例。

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

main函数执行之前,主要就是初始化系统相关资源:

后来看到一本书,详细阐述了main之前和之后的详细机理,十分推荐阅读:

程序员的自我修养 --链接、装载与库

 

实际上,在可执行文件被加载之后,控制权立即交给由编译器插入的Start函数,它将对后面这些全局变量进行准备:
   _osver 操作系统的构件编号
      _winmajor 操作系统的主版本号
      _winminor 操作系统的次版本号
      _winver 操作系统完全版本号
      __argc 命令行参数个数
      __argv 指向参数字符串的指针数组
      _environ 指向环境变量字符串的指针数组
Start函数初始化堆并调用main函数.mian函数返回之后,Start函数调用Exit函数结束该进程.
启动函数Start的源代码在:
   crt0.c Microsoft Visual C++

 

 

 

#include <stdio.h>
#include <stdlib.h>

static void before(void) __attribute__ ((constructor));
static void after(void) __attribute__ ((destructor));
static void middle(void);

static void before()
{
        fprintf(stderr, "In %s %d\n", __func__, __LINE__);
}

static void after()
{
        fprintf(stderr, "In %s %d\n", __func__, __LINE__);
}

static void middle()
{
        fprintf(stderr, "In %s %d\n", __func__, __LINE__);
}
int main(void)
{
        atexit(middle);
        return 0;
}

通过指定(注册)
static void before(void) __attribute__ ((constructor));
表明这个函数应该在main之前执行

static void after(void) __attribute__ ((destructor));
表明函数在main之后执行

atexit表明函数在退出的时候执行


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值