【attribute】可用于为函数或者数据声明赋属性值。
给函数分配属性的主要目的是为了让编译程序可以优化处理。
分配给函数的属性位于函数原型的声明中。
attribute((constructor)) 在main()函数之前调用
attribute((destructor))在main()函数之后调用
#include <stdio.h> #include <stdlib.h> static void before(void) __attribute__((constructor)); static void after(void) __attribute__((destructor)); static void before() { printf("before main\n"); } static void after(void) { printf("after main\n"); } int main() { printf("main\n"); return 0; }
控制台打印结果如下:
通过参数设置优先级关系:
#include <stdio.h> #include <stdlib.h> static void before(void) __attribute__((constructor)); static void before3(void) __attribute__((constructor(103))); static void before2(void) __attribute__((constructor(102))); static void before1(void) __attribute__((constructor(101))); static void before2() { printf("before 102\n"); } static void before1() { printf("before 101\n"); } static void before3() { printf("before 103\n"); } static void before() { printf("before main\n"); } int main() { printf("main\n"); return 0; }
控制台打印结果如下: