弱函数使用

Posted on 2023-01-16 14:45  牛man  阅读(503)  评论(0)    收藏  举报

what?

_weak函数是为了防止代码里面重复定义了同样函数名的函数,编译器在链接的时候会报错的一种手段。

why?

_weak 一般被用在公共的接口上,比如中断入口函数,假如在isr.c 定义了一个叫_weak xxx_IRQHandler的弱函数,当我在xxx,c中重新定义了一个xxx_IRQHandler(强符号)的时候,编译器就会直接执行xxx.c文件里的函数了,反之执行Isr.c里的弱函数。注意:弱函数被使用在不同的.c文件中才有意义

how?

在一个函数名前面加_weak ,c99并没有__weak关键字。此关键字是编译器外扩的。所以不同的编译器可能不一样。比如gcc编译链中并没有这个关键字。而是使用__attribute__((weak))代替。为了方便移植,我们可以宏定义,如下:

#ifndef __weak
#define __weak __attribute__((weak))
#endif

 

参考:(173条消息) _weak 弱函数_Yank_k的博客-CSDN博客_weak弱函数