- 总结
1:attribute((constructor)) 先于main()函数调用,attribute((destructor)) 在main()函数后调用
2:只有constructor有优先级,指定优先级时,先执行优先级小的,再执行优先级大的,最后执行没有指定优先级。0-100是保留优先级。
- 优点
给编译器提供上下文,帮助编译器做优化,合理使用可以收到显著的优化效果。
编译器会根据 attribute 产生一些编译警告,使代码更规范。
给代码阅读者提供必要的注解,助其理解代码意图。
-
使用场景
-
代码
#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;
}
- 效果