本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。
作者:gfree.wind@gmail.com
博客:linuxfocus.blog.chinaunix.net
以前知道这个GCC扩展特性,但是一直没有试过。今天写了个小的测试程序试验一下。
- #include <stdlib.h>
-
#include <stdio.h>
-
-
static void __attribute__ ((constructor)) my_init()
-
{
-
printf("my_init\n");
-
}
-
-
static void __attribute__ ((destructor)) my_fini()
-
{
-
printf("my_fini\n");
-
}
-
-
-
static void exit_clean()
-
{
-
printf("exit_clean\n");
-
}
-
-
int main()
-
{
-
-
atexit(exit_clean);
-
printf("Enter main\n");
-
-
return 0;
-
}
执行结果为:
- my_init
-
Enter main
-
exit_clean
-
my_fini
可见,使用__attribute__((constructor))可以使函数在main之前被执行,而__attribute((destructor))可以在main函数执行完毕后执行。其实这两个扩展特性,主要是GCC为C++的全局类的构造和析构函数准备的。但是对于C来说,在特定的情况下,我们同样也可以使用这两个扩展特性,来完成一些特殊的需求。
阅读(3788) | 评论(2) | 转发(0) |