编译器连接时的弱引用的作用是什么?


最近在看《程序员的自我修养》,连接这一章中降到了强符号和弱符号、强引用和弱引用,我比较疑惑的是编译器连接时的弱引用的作用是什么?

gcc C++

維以不咏傷 11 years, 11 months ago

强符号和若符号的概念就不解释了,之前有很多帖子说过这个问题了
解释一下强引用和弱引用,主要从编译器的角度来说吧。假设一个强引用,给出了生命但却没给定义的时候,编译器在编译阶段就会报错。而弱引用编译的时候就不会报错。例如下面的代码

   
  __attribute__ ((weakref)) void foo();
  
int main()
{
if (foo) foo();
}

这时foo是一个弱引用。运行时会判断。若定义了foo就调用foo,若没有定义,就不调用。这个对于程序的裁剪和组合非常有帮助。举个例子,例如你不是QQ会员,那么提供你的功能的库函数里面就不给出foo这个函数的定义,那么你就没有会员特权了。假设你是QQ会员,只需要给出一个有foo函数定义的库,那么你就可以使用会员特权了。这样不需要改代码,只需要管理一下函数就可以轻松实现,所以说这个使程序的裁剪和组合更加容易。

@Mikan answered 11 years, 11 months ago

Your Answer