C陷阱与缺陷第四章 连接

1.什么是连接器
连接器把若干个C源程序合并成一个整体;典型的连接器把编译器生成的若干个目标模块,整合成一个被称为载入模块或可执行文件的 实体,该实体能够被操作系统直接执行。
连接器通常把目标模块看成是由一组外部对象组成的,禁止同一个载入模块中的两个不同外部对象拥有相同的名称。

2.声明与定义
int a; 如果其位置出现在所有的函数体之外,那么它就被称为外部对象a的定义,同时为a分配了存储空间,初始值默认为0;
extern int a; 不是对a的定义,说明a的存储空间是在程序的其他地方分配的。

  1. 命名冲突与static修饰符
    如果两个不同的源文件中都包括了定义 int a,它表示程序错误,或者在两个源文件中共享a的同一个实例;
    static int a; a的作用域限制在一个源文件内,对其他源文件,a是不可见的。

4.检查外部类型
保证一个特定名称的所有外部定义在每个目标模块中都有相同的类型
比如:char fie[] = “abcd”; //文件1
extern char file[]; //文件2

你可能感兴趣的:(C)