Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8015936
  • 博文数量: 159
  • 博客积分: 10424
  • 博客等级: 少将
  • 技术积分: 14615
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-14 12:45
个人简介

啦啦啦~~~

文章分类
文章存档

2015年(5)

2014年(1)

2013年(5)

2012年(10)

2011年(116)

2010年(22)

分类: C/C++

2011-09-29 21:47:55

本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。
作者:gfree.wind@gmail.com
博客:linuxfocus.blog.chinaunix.net
 

以前知道这个GCC扩展特性,但是一直没有试过。今天写了个小的测试程序试验一下。
  1. #include <stdlib.h>
  2. #include <stdio.h>

  3. static void __attribute__ ((constructor)) my_init()
  4. {
  5.     printf("my_init\n");
  6. }

  7. static void __attribute__ ((destructor)) my_fini()
  8. {
  9.     printf("my_fini\n");
  10. }


  11. static void exit_clean()
  12. {
  13.     printf("exit_clean\n");
  14. }

  15. int main()
  16. {

  17.     atexit(exit_clean);
  18.     printf("Enter main\n");

  19.     return 0;
  20. }
执行结果为:
  1. my_init
  2. Enter main
  3. exit_clean
  4. my_fini
可见,使用__attribute__((constructor))可以使函数在main之前被执行,而__attribute((destructor))可以在main函数执行完毕后执行。其实这两个扩展特性,主要是GCC为C++的全局类的构造和析构函数准备的。但是对于C来说,在特定的情况下,我们同样也可以使用这两个扩展特性,来完成一些特殊的需求。




阅读(3691) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

GFree_Wind2011-10-03 15:02:22

Rainyzzj: 谢谢分享,顺便了解了一下atexit()的用法。哈哈。.....
呵呵,我是拿atexit作比较的。。。

Rainyzzj2011-10-02 21:13:22

谢谢分享,顺便了解了一下atexit()的用法。哈哈。