C语言基础:弱引用

假如在main.c中有如下一段代码:

#include <stdio.h>
extern void do_something();

void main()
{
	do_something();
	printf("hello world.\n");
}

我们都知道,直接编译main.c会出现无法解析的外部符号错误或者没有定义的引用错误,如下图。
在这里插入图片描述
因为do_something函数没有定义嘛。
此时如果我把do_something的声明改成如下的样子:

__attribute__((weak)) void do_something();

再去编译main.c,就不会提示错误了。

为什么加了__attribute__((weak)) 这句话就能在没有函数定义的前提下,编译成功呢?

attribute((weak))这句话修饰的声明,就是一个弱引用。当编译器遇到弱引用的函数时,不管函数有没有定义,编译都不会报错的。

那么弱引用的实际意义又是什么呢?

弱引用多用在库文件的制作中,库函数中定义了弱引用的函数名,你对该函数进行定义,这样你写的代码就被库函数调用了。

下面举个例子。 比如库函数里有一个函数叫Method,定义了一个step_one的弱引用。

__attribute__((weak)) void step_one();

void step_two()
{
	printf("Method step_two.\n");
}

void Method()
{
	step_one();
	step_two();
}

在你自己的源代码中,定义了step_one函数。如下

void step_one()
{
	printf("myfunction step_one.\n");
}

此时如果你去调用库函数Method,就会输出:

myfunction step_one.
Method step_two.

以上就是弱引用的用法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值