函数初始化列表创建和使用

用途:

当不想显性调用某一个函数时候,比如文件a.c里有个函数A,若想在main.c里面调用函数A,但是又不想通过函数名A去调用函数A。

解决办法:

1.在任意.h文件中

#define LIST_PRIORITY_MAX    "0"
#define LIST_PRIORITY_MIN    "20"
typedef int (*init_fn_t)(void);
#define USED __attribute__((used))
#define INIT_EXPORT(fn, level)  USED const init_fn_t __list_init_##fn __attribute__((section("._list_." level))) = fn
#define INIT_MODE_EXPORT(fn, level) INIT_EXPORT(fn, level)

2.通过INIT_MODE_EXPORT将int (*)(void)类型的函数加入到列表中

3.在main.c(或其他.c)中

int mode_init_start(){
    return 0;
}
int mode_init_end(){
    return 0;
}
INIT_MODE_EXPORT(mode_init_start, LIST_PRIORITY_MAX);
INIT_MODE_EXPORT(mode_init_end, LIST_PRIORITY_MIN);

int module_list_init(){
    volatile const init_fn_t *fn_ptr;
    for (fn_ptr = &__list_init_mode_init_start; fn_ptr < &__list_init_mode_init_end; fn_ptr ++)
    {
        (*fn_ptr)();
    }
    return 0;
}

4.可以在main函数最前面调用module_list_init(),也可以选择其他合适位置

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值