C:__attribute__ weak 的作用

举报
小麦大叔 发表于 2021/12/04 00:28:13 2021/12/04
【摘要】 关于 weak weak经常出现在各种c代码中,其作用是将当前文件的对应函数声明为弱函数符号,如果外部文件出现相同的函数名,最终编译出来的 文件会优先指向外部文件的函数符号; 通常需要使用__attri...

关于 weak

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

void foo(void) __attribute__ ((weak, warn_unused_result));

  
 
  • 1

或者

__attribute__ ((weak, warn_unused_result)) void foo(void);

  
 
  • 1

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

测试

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

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

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

gcc *.c *.h -o test && chmod +x test

  
 
  • 1

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

文章来源: great.blog.csdn.net,作者:小麦大叔,版权归原作者所有,如需转载,请联系作者。

原文链接:great.blog.csdn.net/article/details/103929250

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。