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

2009-4-10 16:11 1786 1 2 分类: MCU/ 嵌入式

                                                          第4章  连接


●什么是连接器


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


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


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


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


●声明与定义


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


●命名冲突与static修饰符


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


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


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


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


●形参、实参与返回值


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


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


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


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


●检查外部类型


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


●头文件


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


 


 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户320184 2010-12-28 12:09

精辟~~~

tengjingshu_112148725 2009-4-10 21:38

一直看你的blog,特别是之前的C51日记,受益匪浅
相关推荐阅读
用户518079 2011-05-14 00:13
嵌入式系统与FPGA的最新动向
嵌入式处理器:2011年有望增长12%,中国设计增幅高于全球   据Semico Reserch资深分析师Tony Massimini介绍[1],2010年,微逻辑组件(微处理器、微控制器和DSP)的...
用户518079 2011-05-14 00:11
苹果-三星的合作关系变质
苹果公司和三星公司一度曾是非常紧密的合作关系,不过现在,这两家公司却闹了起来,此举将较大幅度的降低三星公司市场份额。据报道,2010年苹果公司在三星订购了数量惊人的DRAM,NAND闪存以及其他半导...
用户518079 2011-05-14 00:10
英特尔3D晶体管引发的震动:ARM继续打低功耗牌么?
这两日,半导体产业界被一个消息所震撼:英特尔宣布自己将彻底告别传统的平面晶体管,只身进入一个3D架构、22nm制程的新纪元——这个芯片巨人新推出的处理器(代号Ivy Bridge),将由其自行研发的3...
用户518079 2010-12-19 22:00
经典回复!
( 我靠 ! )此回复虽有且仅有两个字,却深刻地表达了回复人的深深的祝福与刻骨的情感,可谓言简意赅,一字千金,字字扣人心弦,字字催人泪下,足可见回复人扎实的文字功底和信手拈来的写作技巧及惨绝人环的创新...
用户518079 2010-08-13 12:13
实例说明PID(转)
PID实指“比例proportional”、“积分integral”、“微分derivative”,如果我们要求被控制的对象最终趋于一个稳定的结果,一般就可以使用PID算法。假设说,有一辆速度为1m/...
用户518079 2010-08-13 12:06
延迟实现八位的PWM
八位的PWM:unsigned char i;while(1){        P1^1 = 1;        delay(i);        P1^1 = 0;        delay(256...
EE直播间
更多
我要评论
1
1
关闭 站长推荐上一条 /3 下一条