C语言 弱定义

弱函数是一种在函数定义前添加__weak属性的技术,允许编译器在链接时优先选择非weak版本的函数。这种机制在代码移植和多模块配合中很有用,例如当接口未实现时,可以定义弱函数作为占位符,确保编译正常。之后实现接口,编译器会自动选择非弱定义的版本。文章还提供了针对不同编译器的弱函数宏定义示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:

函数名称前面加上__WEAK属性修饰符称为“弱函数”,类似C++的虚函数。链接时优先链接为非weak定义的函数,如果找不到则再链接带weak函数。

意义:

这种自动选择的机制,在代码移植和多模块配合工作的场景下应用较多。例如前期移植代码,需要调用某个接口fun,但当前该接口不存在或者未移植完整使用,可以使用weak关键字定义为空函数先保证编译正常。后续移植完成实现了fun,即软件中有2个fun函数没有任何错误,编译器自动会识别使用后者。当然也粗暴的#if 0屏蔽对fun的调用,但要确保后续记得放开

使用条件 框架

一般简化定义,基本宏定义

#ifdef __CC_ARM /* ARM Compiler */

    #define WEAK __weak

#elif defined(__IAR_SYSTEMS_ICC__) /* for IAR Compiler */

    #define WEAK __weak

#elif defined(__GNUC__) /* GNU GCC Compiler */

    #define WEAK __attribute__((weak))

#elif defined(__ADSPBLACKFIN__) /* for VisualDSP++ Compiler */

    #define WEAK __attribute__((weak))

#elif defined(_MSC_VER)

    #define WEAK

#elif defined(__TI_COMPILER_VERSION__)

    #define WEAK

#else

    #error not supported tool chain

#endif

a.c 不要再声明,单纯写在.c就可以

WEAK void fun(void) 

    //do this

b.c

//不在同一个.c,两同名函数不能在同一个文件

void fun(void) 

    //do that

函数声明:不要再声明弱定义

b.h

void fun(void) ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值