最近在开发STM32F407项目发现工程中有__weak函数说明,下面解释一下怎么应用
#if defined ( __GNUC__ )
#ifndef __weak
#define __weak __attribute__((weak))
#endif /* __weak */
#ifndef __packed
#define __packed __attribute__((__packed__))
#endif /* __packed */
#endif /* __GNUC__ */
用于函数声明,__weak声明于函数时,在工程中可以没有函数实体,当函数中有实体函数时(没有带__weak)在函数调用的时候只调用没有带__weak的函数,如下:
int func(void)
{
Func_t();
}
__weak void Func_t(void)
{
}
其实这样做的原因是为了使软件框架更加利于扩展和兼容;同时也满足没有实体函数而报编译错误,如果在上述的结构中要求在Func_t函数中实现加法运算,函数只要做如下修改:
void Func_t(void)
{
c=a+b;// 假设a,b,c都是全局变量;
}
PS:注意函数头没有带__weak。