zoukankan      html  css  js  c++  java
  • C:__attribute__ weak 的作用

    关于 weak

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

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

    或者

    __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
    在这里插入图片描述

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

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

  • 相关阅读:
    ubuntu 10.04 install network bcm4418
    linux vi commend
    api
    ubuntu安装jdk
    maven常用命令介绍
    ubuntu 10.04 install oracle11g
    putty中文乱码问题解决
    SCP不需要密码
    java command
    Ubuntu vsftpd 安装配置
  • 原文地址:https://www.cnblogs.com/unclemac/p/12783357.html
Copyright © 2011-2022 走看看