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

描述

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

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

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

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

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

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

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

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

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

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

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

 




审核编辑:刘清

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分