C语言 弱定义

说明:

函数名称前面加上__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) ;

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值