【C++ 基础知识】__attribute__((constructor)) 和 __attribute__((destructor))

  • 总结

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;
}
  • 效果
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值