使用GCC扩展attribute,在main函数外进行操作

32 篇文章 0 订阅
以前知道这个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来说,在特定的情况下,我们同样也可以使用这两个扩展特性,来完成一些特殊的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值