C语言中,同一个函数能不能被定义两次?
稍微有点C语言基础的同学,一定知道不能这样做。
最近有同学在学习STM32,他就发现了这么一个问题,有些函数前面加了 __weak,然后这个函数就可以被重新定义。
这种情况常见于中断函数里面,意思就是用户可以自己定义,也可以用系统提供的。
__weak并不是C语言里面的关键字,具体的实现还是得看编译器。
比如在keil里面,__weak就是一个宏定义,使用了C语言里面的 attribute 机制,这个机制我们在前面也讲过,里面可以用 packed aligned unused 等等。
今天我们再来补充一个,weak。
比如在 test.c 文件中定义了函数 test,如果在 main.c 里面又定义了一次,那编译的时候,肯定会提示函数重复定义,一个函数不能被定义两次。
但是如果在某个 test 函数前面加上 __attribute__((weak)),编译就能顺利通过。
并且运行的时候,默认调用的也是前面没有 weak 修饰的函数。
weak 就是告诉编译器,该函数为弱定义,作为备选,如果用户自己定义了,还是优先调用用户定义的函数。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !