您的位置:首页 > 大数据 > 人工智能

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

2012-03-29 21:13 399 查看
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表明函数在退出的时候执行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: