新闻  |   论坛  |   博客  |   在线研讨会
嵌入式微控制器C语言学习笔记15-《C陷阱与缺陷》第4章
0750long | 2009-04-12 16:16:25    阅读:798   发布文章

嵌入式微控制器C语言学习笔记15-《C陷阱与缺陷》第4章

 

                                                          第4章  连接

●什么是连接器

C语言中的一个重要思想就是分别编译,即若干个源程序可以在不同的时候单独进行编译,然后在恰当的时候整合在一起。

典型的连接器把由编译器或汇编器生成的若干个目标模块,整合成一个被称为载入模块或可执行文件的实体,该实体能够被操作系统直接执行。

连接器的输入是一组目标模块和库文件,连接器的输出是一个载入模块。连接器读入目标模块和库文件,同时生成载入模块。对每个目标模块中的每个外部对象,连接器都要检查载入模块,看是否已有同名的外部对象。如果没有,连接器就将该外部对象添加到载入模块中;如果有,连接器就要开始处理命名冲突。

连接器对C语言“知之甚少”,所以有很多错误不能被检测出来。

●声明与定义

每个外部对象都必须在程序某个地方进行定义。每个外部变量只能够定义一次。

●命名冲突与static修饰符

两个具有相同名称的外部对象实际上代表的是同一对象,即使编程者的本意并非如此,但系统却会如此处理。

static修饰符是一个能够减少命名冲突的有用工具。

如果若干个函数需要共享一组外部对象,可以将这些函数放到一个源文件中,把它们需要用到的对象也都在同一源文件中以static修饰符声明。

static修饰符不仅适用于变量,也适用于函数。

●形参、实参与返回值

任何C函数都有一个形参列表,列表中的每个参数都是一个变量,该变量在函数调用过程中被初始化。

函数调用时,调用方将实参列表传递给被调用函数。

任何一个C函数都有返回类型,要么是void,要么是函数生成结果的类型。

如果任何一个函数在调用它的每个文件中,都在第一次被调用之前进行了声明或定义,那么就不会有任何与返回类型相关的麻烦。

●检查外部类型

保证一个特定名称的所有外部定义在每个目标模块都有相同的类型,一般来说是程序员的责任。而且,“相同的类型”应该是严格意义上的相同。

●头文件

每个外部对象只在一个地方声明,这个声明的地方一般就在一个头文件中,需要用到该外部对象的所有模块都应该包括这个头文件。特别需要指出的是,定义该外部对象的模块也应该包括这个头文件。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客