zoukankan      html  css  js  c++  java
  • __attribute__((weak)) ------ 关于弱符号的用法

    弱符号使用场景

    我们不确定外部模块是否提供一个函数func,但是我们不得不用这个函数,即自己模块的代码必须用到func函数:

    extern int func(void);

    ...................

    int a = func();

    if( a > .....)

    {

    ..........

    }

    ............

    我们不知道func函数是否被定义了

    这会导致2个结果:

    1:外部存在这个函数func,并且EXPORT_SYMBOL(func),那么在我自己的模块使用这个函数func,正确。

    2:外部其实不存在这个函数,那么我们使用func,程序直接崩溃。

    所以这个时候,__attribute__((weak)) 派上了用场。

    在自己的模块中定义:

    int  __attribute__((weak))  func(......)

    {

    return 0;

    }

    将本模块的func转成弱符号类型,如果遇到强符号类型(即外部模块定义了func),那么我们在本模块执行的func将会是外部模块定义的func。

    如果外部模块没有定义,那么,将会调用这个弱符号,也就是在本地定义的func,直接返回了一个1(返回值视具体情况而定)

    相当于增加了一个默认函数。

    原理:连接器发现同时存在弱符号和强符号,有限选择强符号,如果发现不存在强符号,只存在弱符号,则选择弱符号。如果都不存在:静态链接,恭喜,编译时报错,动态链接:对不起,系统无法启动。

  • 相关阅读:
    Jxl 简单运用 Excel创建,插入数据,图片,更新数据,
    tomcat端口号被占用
    QQ、MSN、淘包旺旺、Skype临时对话的html链接代码
    验证信息
    wpf学习笔记数据绑定功能总结
    wpfStyle注意点
    wpf轻量绘图DrawingVisual
    wpfDrawingBrush注意点
    wpf容易误解的Image
    wpf装饰器
  • 原文地址:https://www.cnblogs.com/zongfanstudy/p/12720456.html
Copyright © 2011-2022 走看看