您的位置:首页 > 理论基础

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

2014-03-03 12:25 253 查看
 

 

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

 

【说明】

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

 

【区分】

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

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

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

              

             2】自定符号类型

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

                            


【规则】

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

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

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

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

 

【强引用和弱引用】

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

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

              

            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息