7.6.1 C语言程序的组织架构:多个C文件+多个h文件
(1)庞大、完成的一个C语言程序(譬如Linux内核、uboot)由多个C文件和多个h文件组成的。 (2)程序的生成过程就是:编译 + 链接;编译是为了将函数/变量等变成.o二进制的机器码格式,链接是为了将各个独立分开的二进制的函数链接起来形成一个整体的二进制可执行程序。
7.6.2 编译以文件为单位、链接以工程为单位
(1)编译器工作时是将所有源文件依次读进来,单个为单位进行编译的。 (2)链接的时候实际上是把第一步编译生成的单个的.o文件整体的输入,然后处理链接成一个可执行程序。
7.6.3 三种链接属性:外连接、内连接、无连接
(1)外连接的意思就是外部链接属性,也就是说这家伙可以在整个程序范围内(言下之意就是可以跨文件)进行连接,譬如普通的函数和全局变量属于外连接。 (2)内连接的意思就是内部(C文件内部)连接属性,也就是说这家伙可以在当前的C文件内部范围内进行连接(言下之意就是不能在当前C文件外面的其它C文件中进行访问、链接)。static修饰的函数/全局变量属于内连接。 (3)无连接的意思就是这个符号本身不参与链接,它跟链接没关系。所有的局部变量(auto的、static的)都是无连接的。
7.6.4 函数和全局变量的同名冲突
(1)因为