连接
本章将考察一个典型的连接器,注意它是如何对c程序进行处理,从而归纳出一些由于连接器的特点而可能导致的错误。
某些c语言实现提供了一个称为lint的程序,可以捕获到需要了解多个源程序文件才能察觉的错误。
1> 连接器的工作原理:连接器的输入是一组目标模块和库文件,连接器的输出是一个载入模块。
连接器读入目标模块和库文件,同时生成载入模块。对每个目标模块中的每个外部对象,连接器都要检查载入模块,看是否已有同名的外部对象。
2> c语言中每个外部变量只能能够定义一次,如果在不同的源文件中定义了同一个变量,大多数系统会拒绝接受该程序。
两个相同名称的外部对象实际上代表的是同一个对象,即使编程者的本意并非如此。
3> c语言语法规则先声明再使用,这是有别于其他语言的。
4> 外部变量的类型在定义时一定要一致。
不要出现使用具有歧义甚至是错误的定义,如:
在一个文件中定义 long n;
而在另一个文件中声明 extern int n;
这可能导致难以预想的错误。
为了避免在4中谈到的问题,我们只需要接受一个简单的规则:
每个外部对象在在一个地方声明。这个声明的地方一般就在一个头文件中,需要用到该外部对象的所有模块都应该包括在这个头文件中。
第四章到此结束!
网友评论