main函数执行之前,主要就是初始化系统相关资源:
后来看到一本书,详细阐述了main之前和之后的详细机理,十分推荐阅读:
程序员的自我修养 --链接、装载与库
#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表明函数在退出的时候执行