【静态链接】第2章---------------------目标文件(弱符号与强符号)

 

 

########  该系列博文为书籍《程序员的自我修养》的笔记 ##########

 

【说明】

              有时我们在程序中一不小心重复定义了2个名字相同的变量,比如在文件A.c中定义了一个int  a , 在B.c 也定义了一个,那么在编译的时候就会出现符号重复定义错误,这种符号称之为“强符号”,而与之对应的就是“弱符号”,这两种符号的区别是这节的重点!

 

【区分】

             1】编译器有以下分类方法

                            1)函数和初始化了的全局变量为强符号

                            2)未初始化的全局变量为弱符号

              

             2】自定符号类型

                            我们可以用如下方式来定义一个强符号为弱符号

                            

【规则】

             如果同时出现了多次定义,根据强弱符号,会有如下规则

                            1)不允许强符号多次定义(不同目标中不能有同名强符号)

                            2)如果一个符号被定义成强符号。又被定义成弱符号,那就选择强符号

                            3)如果在所有目标文件中都是弱符号,那选择存储空间最大的一个。

 

【强引用和弱引用】

             如果一个目标文件引用了不存在的引用而导致错误,那么这个引用就是“强引用”,如果不报错就是“弱引用”

            可以如下把一个符号的引用设置为弱引用。

                          

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值