关于GCC的__attribute__ ((constructor))
gcc为函数提供了几种类型的属性,其中包含:构造函数(constructors)和析构函数(destructors)。
程序员应当使用类似下面的方式来指定这些属性:
带有"构造函数"属性的函数将在main()函数之前被执行,而声明为"析构函数"属性的函数则将在main()退出时执行。
下面给出一个简单的程序作为例子:
- /* test.c */
- #include<stdio.h>
- __attribute__((constructor)) void before_main()
- {
- printf("before main/n");
- }
- __attribute__((destructor)) void after_main()
- {
- printf("after main/n");
- }
- int main()
- {
- printf("in main/n");
- return 0;
- }
$ gcc test.c -o test
$ ./test
before main
in main
after main
根据上面的代码以及输出结果,我们可以猜到__attribute__((constructor))表示这段代码将在main函数前调用,就像在C++里面的全局变量类的构造一样.