栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言基础:弱引用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言基础:弱引用

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

#include 
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.

以上就是弱引用的用法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/869809.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号