0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言中,同一个函数能不能被定义两次?

学益得智能硬件 来源:学益得智能硬件 2024-05-11 18:27 次阅读

C语言中,同一个函数能不能被定义两次?

稍微有点C语言基础的同学,一定知道不能这样做。

最近有同学在学习STM32,他就发现了这么一个问题,有些函数前面加了 __weak,然后这个函数就可以被重新定义。

这种情况常见于中断函数里面,意思就是用户可以自己定义,也可以用系统提供的。

__weak并不是C语言里面的关键字,具体的实现还是得看编译器。

比如在keil里面,__weak就是一个宏定义,使用了C语言里面的 attribute 机制,这个机制我们在前面也讲过,里面可以用 packed aligned unused 等等。

今天我们再来补充一个,weak。

比如在 test.c 文件中定义了函数 test,如果在 main.c 里面又定义了一次,那编译的时候,肯定会提示函数重复定义,一个函数不能被定义两次。

但是如果在某个 test 函数前面加上 __attribute__((weak)),编译就能顺利通过。

并且运行的时候,默认调用的也是前面没有 weak 修饰的函数。

weak 就是告诉编译器,该函数为弱定义,作为备选,如果用户自己定义了,还是优先调用用户定义的函数。




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2249

    文章

    10720

    浏览量

    350256
  • C语言
    +关注

    关注

    180

    文章

    7551

    浏览量

    131837

原文标题:函数也能重复定义

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言中定义的应用

    在C语言中,宏定义是一种预处理指令,用于在代码中定义和使用常量、函数或代码片段的替代。
    发表于 08-17 15:33 496次阅读

    C语言中结构体能不能相加

    C语言中,结构体能不能相加?
    的头像 发表于 12-19 17:04 886次阅读
    C<b class='flag-5'>语言中</b>结构体<b class='flag-5'>能不能</b>相加

    STM32F103能在PWM周期内对同一个AD通道采样两次吗?

    求助各位大神: 小弟在此感谢:STM32F103,,希望能在PWM周期内对同一个AD通道采样两次?或者多次,可以控制采样起点,连续采样不合适。有什么办法吗?类似于在周期下溢点,上溢
    发表于 04-17 07:25

    同一循环同时调用同一个子VI

    可以同时在循环里调用同一个子VI吗 这两次调用优先级是样的 但是子VI的输入参数不样可以
    发表于 12-09 14:41

    请问9361能不能同时开始两个接收通道

    ,类似于阵列信号处理那种方式。还是每次只能开启A,B,C路径。2.能不能同时开始两个接收通道,接收不同频段的信号。我在看AD9361
    发表于 08-29 11:27

    si4463的发送和接收r能不能使用同一个频点?

    si4463的发送和接收r能不能使用同一个频点,怎么用?
    发表于 09-14 10:07

    【每日知识点】C语言中const详解

    [5] = {1,2,3,4,5};array[0] = array[0]+1; //错误数组元素与变量类似,具有只读属性,不能更改;旦更改,如程序将会报错。3、 修饰指针C
    发表于 03-29 10:53

    能不能C语言中像操作寄存器那样直接操作一个字节的单独位呢

       在C语言中通常操作只有真假种状态的的数据时使用布尔bool变量比较多,如果需要同时观察多个状态,这时候选择位操作效率会更高,用一个字节的8位分别表示8种状态。比较节省内存,处理
    发表于 02-25 06:13

    同相放大器,Multisim仿真两次为啥有不同的结果?

    同一个运放电路,只是分别画了两次,在Multisim14.2仿真居然有两次不同的结果。查了半天也不知道问题在什么地方,麻烦坛子内的高手看下。*附件:Desktop.rar
    发表于 10-23 19:29

    STM32F767ZGT6连续调用两次rt_spi_transfer读取同一个地址,第二读取的时反馈之异常变为0怎么解决?

    读取两次 以下是SPI读取和写入使用的函数 从日志打印可以看到,第二读取同一个地址,此时反馈为0。 麻烦各位大神帮忙看下,是哪里写的有问
    发表于 08-20 15:24

    C语言中怎么定义不定长度的数组?

    C语言中怎么定义不定长度的数组
    发表于 10-09 07:40

    同一个定时器能不能既有输出比较又有输入捕获?

    同一个定时器,比如TIM1能不能设置通道1位定时器比较,通道2位定时器输入捕获
    发表于 10-24 08:10

    超声波模块的发射脚能不能接在同一个单片机引脚?

    超声波模块的发射脚能不能接在同一个单片机引脚
    发表于 10-26 06:34

    电池能不能修复?

    电池能不能修复? 电池修复作为一个新生事物,许多人对它不了解,也有许多人对它一知半解。那么电池到底能不能修复呢?
    发表于 11-23 10:40 1020次阅读

    如何给C语言中函数定义两个不同的名字?

    最近有位哥问我,如何给C语言中函数定义两个不同的名字?就是这两个名字都是指向同一个函数同一个
    的头像 发表于 12-19 16:21 408次阅读