关于 weak
weak
经常出现在各种
c
代码中,其作用是将当前文件的对应函数声明为弱函数符号,如果外部文件出现相同的函数名,最终编译出来的
文件会优先指向外部文件的函数符号;
通常需要使用
__attribute__
,不知道标准C有没有这样的用法;具体如下所示;
或者
看
Freertos
的源码的时候,发现了它;
看
glibc
的源码的时候,发现了它;
测试
于是为了一探究竟,简单地写了一下代码测试;
-
中的a.c
函数为弱定义;foo(void)
-
中的b.c
函数为强定义;foo(void)
a.c
b.h
b.c
最终输出结果显示
b.c,foo,4
可见打印的信息的
foo
函数在
b.c
的第四行;所以,
b.c
中的
foo
函数作为强函数符号,最终被编译到可执行程序中;可以最终结果验证前面的结论。