1 C语言中,同一个函数能不能被定义两次?-德赢Vwin官网 网
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 就是告诉编译器,该函数为弱定义,作为备选,如果用户自己定义了,还是优先调用用户定义的函数。




审核编辑:刘清

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

    关注

    2270

    文章

    10895

    浏览量

    355715
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136680

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

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

收藏 人收藏

    评论

    相关推荐

    C语言中定义的应用

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

    C语言中定义的使用技巧

    #define命令是C语言中定义命令,它用来将
    发表于 09-05 10:12 1158次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言中</b>宏<b class='flag-5'>定义</b>的使用技巧

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

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

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

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

    请问ISO3082中两个地GND1和GND2能不能连接到同一个地上?

    ISO3082中两个地 GND1和GND2能不能连接到同一个地上
    发表于 12-02 07:29

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

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

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

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

    电池能不能修复?

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

    C语言中的宏定义

    #define命令是C语言中定义命令,它用来将
    的头像 发表于 09-28 16:05 3447次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言中</b>的宏<b class='flag-5'>定义</b>

    c源程序至少包括函数

    C源程序至少包括函数C
    的头像 发表于 11-26 09:01 1112次阅读

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

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

    同VLAN不同的网段能不能互通?

    同VLAN不同的网段能不能互通? 同一个VLAN中的设备拥有相同的网络地址范围,因此它们可以通过该VLAN进行通信。而不同VLAN中的设备拥有不同的网络地址范围,它们通常不能直接互通。然而,在某些
    的头像 发表于 02-04 11:21 3080次阅读

    使用C语言实现函数模板

      用C语言能不能实现通用的函数,既能完成整数的相加,又能完成浮点数的相加?
    的头像 发表于 11-09 11:38 373次阅读

    C语言中的头文件能不能重复包含

    C语言中的头文件能不能重复包含? 比如代码写成这样,stdio.h 连续包含了两次。 #include #include int main(){ printf("helloworld
    的头像 发表于 11-26 17:19 149次阅读

    C语言中申请的堆内存能不能自动释放

    C语言中申请的堆内存能不能自动释放?每次都要手动 free 太麻烦,也容易忘记。 学过 C++ 的同学,应该首先能想到智能指针。 但是这是C
    的头像 发表于 11-27 09:33 107次阅读