GCC的__attribute__ ((constructor))和__attribute__ ((destructor))

Posted dylancao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GCC的__attribute__ ((constructor))和__attribute__ ((destructor))相关的知识,希望对你有一定的参考价值。

    通过一个简单的例子介绍一下gcc的__attribute__ ((constructor))属性的作用。gcc允许为函数设置__attribute__ ((constructor))和__attribute__ ((destructor))两种属性,顾名思义,就是将被修饰的函数作为构造函数或析构函数。程序员可以通过类似下面的方式为函数设置这些属性:  

void funcBeforeMain() __attribute__ ((constructor)); 

void funcAfterMain() __attribute__ ((destructor));

也可以放在函数名之前:
void __attribute__ ((constructor)) funcBeforeMain();
void __attribute__ ((destructor)) funcAfterMain();
带有(constructor)属性的函数将在main()函数之前被执行,而带有(destructor)属性的函数将在main()退出时执行。
下面给出一个简单的例子:
技术分享图片
 1 #include <stdio.h>
 2 
 3 void __attribute__((constructor)) funcBeforeMain()
 4 {
 5     printf("%s...
", __FUNCTION__);
 6 }
 7 
 8 void __attribute__((destructor)) funcAfterMain()
 9 {
10     printf("%s...
", __FUNCTION__);
11 }
12 
13 int main()
14 {
15     printf("main...
");
16     return 0;
17 }
View Code

运行结果:

funcBeforeMain...
main...
funcAfterMain...

以上是关于GCC的__attribute__ ((constructor))和__attribute__ ((destructor))的主要内容,如果未能解决你的问题,请参考以下文章

等效于 Visual C++ 中 gcc 的 __attribute__ 格式

C 语言编程 — GCC Attribute 语法扩展

C 语言编程 — GCC Attribute 语法扩展

GCC 的 __attribute__((__packed__)) 是不是保留原始顺序?

GCC __attribute__((constructor)) 在对象构造函数之前调用

Linux gcc支持的语法 __attribute__ 属性设置