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

来源:互联网 发布:stp指定端口选举过程 编辑:程序博客网 时间:2024/05/22 09:51

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表明函数在退出的时候执行


原创粉丝点击