C陷阱与缺陷——第四章:连接

4.1什么是连接器
C语言的一个重要思想是分别编译(Separate Compilation),即 若干个源程序可以在不同的时候单独进行编译,然后在恰当的时候整合到一起。
尽管连接器不理解C语言,但理解机器语言和内存布局。编译器把C源程序“翻译”成对连接器有意义的形式,这样连接器才能够读懂C语言。
典型的连接器把由编译器或者汇编器生成的若干个目标模块,整合成一个被称为载入模块或者可执行文件的实体,该实体能够被操作系统直接执行。某些目标模块是直接作为输入提供给连接器,而另外一些目标模块是根据连接过程的需要,从库文件中取得。
连接器通常把目标模块看成是由一组外部对象(external object)组成的。每个外部对象代表机器内存中的某个部分,并通过一个外部名称识别。
大多是的连接器禁止同一个载入模块中两个不同的外部对象拥有相同的名称。
连接器的工作情形:连接器的输入是一组目标模块和库文件。连接器的输出是一个载入模块。连接器的输出输一个载入模块。连接器读入目标模块和库文件,同时生成载入模块。对每个目标模块中的每个外部对象,连接器都要检查载入模块,看是否已有可同名的外部对象。如果没有,连接器就将该外部对象添加到载入模块中;如果有,连接器就要开始处理命名冲突。

4.2声明与定义
声明语句 int a; 如果出现位置在所有的函数体之外,那么就称其为外部对象 a 的定义。该语句说明了 a 是一个外部整型变量,同时为 a 分配了存储空间。由于外部对象 a 未被明确的指定初始值,所以C语言中默认值 为 0.
声明语句 int a=7; 在定义 a 的同时也为 a 指定了初始值。则这个语句不仅为 a 分配内存,而且说明了该内存中应该存储的值。
声明语句 extern int a ࿱

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值