gcc 对c程序的函数做了很多扩展。一个很有趣的扩展,给一个c程序增加构造函数。如下的函数原型声明了一个函数为程序的构造函数:
void func() __attribute__((constructor));
这种构造函数有点类似于c++的构造函数,它是程序自动调用的,并且先于main函数儿调用。现在有这样一个问题,如果一个程序在多个文件中有多个构造函数,它们的调用顺序是什么样的呢?下面的测试程序回答了这个问题:
//main.c file
#include
#include
#include
#include"other.h"
void func1() __attribute__((constructor));
void func2() __attribute__( (constructor) );
void func1()
{
printf("%s\n",__func__);
}
void func2()
{
printf("%s\n",__func__);
}
int main()
{
printf("main\n");
return 0;
}
//main.c fiule ends
//other.h file
#ifndef OTHER_H
#define OTHER_H
void func_in_other_file() __attribute__((constructor));
#endif
//other.h file ends
//other.c file
#include "other.h"
void func_in_other_file()
{
printf("%s\n",__func__);
}
//other.c file ends
使用cc -o t ./main.c ./other.c命令编译,执行./t,输出如下:
func_in_other_file
func2
func1
main
使用cc -o t ./other.c ./main.c 命令编译,执行./t,输出如下:
func2
func1
func_in_other_file
main
可见:
1)构造函数先于main函数而执行
2)不同构造函数如果在同一个文件中,则先出现的函数后执行
3)对于不同文件中的构造函数,编译命令中后出现的.c文件的构造函数先执行
阅读(1904) | 评论(0) | 转发(0) |