__attribute__ 之weak,alias属性

//strong.c

#include <stdio.h>

void symbol1()
{
    printf("%s.%s\n",__FILE__,__FUNCTION__);
}
//weak.c

#include <stdio.h>
void symbol1() __attribute__ ((weak,alias("symbol222")));
//void symbol1() __attribute__ ((weak));
void symbol222()
{
    printf("%s.%s\n",__FILE__,__FUNCTION__);
}

int main()
{
    //asm(".weak symbol1\n\t .set symbol1, symbol222\n\t");
    if(symbol1)
 symbol1();
    return 0;
}

//gcc weak.c strong.c -o weak
//./weak
//输出:strong.c.symbol1

//gcc weak.c -o weak
//./weak
//输出:weak.c.symbol222

//总结weak属性
//(1)asm(".weak symbol1\n\t .set symbol1, symbol222\n\t");与
//     void symbol1() __attribute__ ((weak,alias("symbol222")));等效。
//(2)给函数加上weak属性时,即使函数没定义,函数被调用也可以编译成功。
//(3)当有两个函数同名时,则使用强符号(也叫全局符号,即没有加weak的函数)来代替弱符号(加weak的函数)。
//(4)当函数没有定义,但如果是“某个函数”的别名时,如果该函数被调用,就间接调用“某个函数”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值