天天看点

C:__attribute__ weak 的作用

关于 weak

weak

经常出现在各种

c

代码中,其作用是将当前文件的对应函数声明为弱函数符号,如果外部文件出现相同的函数名,最终编译出来的

文件会优先指向外部文件的函数符号;

通常需要使用

__attribute__

,不知道标准C有没有这样的用法;具体如下所示;

或者

Freertos

的源码的时候,发现了它;

C:__attribute__ weak 的作用

glibc

的源码的时候,发现了它;

C:__attribute__ weak 的作用

测试

于是为了一探究竟,简单地写了一下代码测试;

  • a.c

    中的

    foo(void)

    函数为弱定义;
  • b.c

    中的

    foo(void)

    函数为强定义;

a.c

C:__attribute__ weak 的作用

b.h

C:__attribute__ weak 的作用

b.c

C:__attribute__ weak 的作用

最终输出结果显示

b.c,foo,4

C:__attribute__ weak 的作用

可见打印的信息的

foo

函数在

b.c

的第四行;所以,

b.c

中的

foo

函数作为强函数符号,最终被编译到可执行程序中;可以最终结果验证前面的结论。

继续阅读