您的位置:首页 > 编程语言 > C语言/C++

C语言main函数执行的前后

2011-10-23 12:26 190 查看

1.main函数之前--真正的函数执行入口

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

1.设置栈指针。

2.初始化static静态和global全局变量,即data段的内容。

3.将未初始化部分的赋初值:数值型short,int,long等为0,bool为FALSE,指针为NULL等等,即.bss段的内容。

4.运行全局构造器(例如C++中构造的函数)。

5.将main函数的参数argc、argv等传递给main函数,然后才真正运行main函数。

main代码汇编以后的结构:

section .text:

_start

...

call _main

...

call _exit

...

2.程序结束之时--函数atexit()

C函数库为我们提供了一个函数atexit(),该函数的原型为int atexit (void (*function)(void)),定义在stdlib.h函数库中。该函数用来设置一个程序正常结束前调用的函数。当程序调用exit()或从main中返回时,参数function所指的函数就会被调用,在该函数返回后才会真正的退出。函数atexit调用成功返回0,否则返回-1,可以在errno中查看错误信息。atexit()执行时与注册顺序相反。

#include <stdlib.h>

#include <stdio.h>

void function1(void)

{

printf("enter function1... \n");

}

void function2(void)

{

printf("enter function2... \n");

}

void function3(void)

{

printf("enter function3... \n");

}

void function4(void)

{

printf("enter function4... \n");

}

int main(void)

{

atexit(function1);

atexit(function2);

atexit(function3);

atexit(function4);

printf("注意啊,main函数马上就要结束啦!\n");

}

运行结果:注意啊,main函数马上就要结束啦!

enter function4...

enter function3...

enter function2...

enter function1...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: