我是靠谱客的博主 欣喜小猫咪,这篇文章主要介绍C:__attribute__ weak 的作用,现在分享给大家,希望可以做个参考。

关于 weak

weak经常出现在各种c代码中,其作用是将当前文件的对应函数声明为弱函数符号,如果外部文件出现相同的函数名,最终编译出来的
文件会优先指向外部文件的函数符号;
通常需要使用__attribute__,不知道标准C有没有这样的用法;具体如下所示;

复制代码
1
2
void foo(void) __attribute__ ((weak, warn_unused_result));

或者

复制代码
1
2
__attribute__ ((weak, warn_unused_result)) void foo(void);

Freertos的源码的时候,发现了它;
freertos
glibc的源码的时候,发现了它;
在这里插入图片描述

测试

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

  • a.c中的foo(void)函数为弱定义;
  • b.c中的foo(void)函数为强定义;

a.c
在这里插入图片描述
b.h
在这里插入图片描述
b.c
在这里插入图片描述

复制代码
1
2
gcc *.c *.h -o test && chmod +x test

最终输出结果显示b.c,foo,4
在这里插入图片描述
可见打印的信息的foo函数在b.c的第四行;所以,b.c中的foo函数作为强函数符号,最终被编译到可执行程序中;可以最终结果验证前面的结论。

最后

以上就是欣喜小猫咪最近收集整理的关于C:__attribute__ weak 的作用的全部内容,更多相关C:__attribute__内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部