软件工程相关总结

编译与链接
C语言的编译都可以分解为4个步骤,分别为预编译(Preprocess),编译(Compilation),汇编(Assembly)和链接(Linking)。
源文件→(预处理)→(编译)→(汇编)→(链接)→可执行文件
一、预编译
预编译过程主要处理那些源代码中以“#”开始的预编译指令,比如#include #define,以及条件编译##if,#ifdef,#elif,#else,#endif,包括:
(1)所有的#define删除,并展开所有的宏定义。
(2)将#include包含的文件插入到该预编译指令的位置。这个过程是递归的,也就是说被包含的文件还可能包含其他文件
(3)删除所有的注释
(4)添加行号和文件名标识,以便于编译器产生调试用的行号信息及用于编译时产生的编译错误或警告时能够显示行号
(5)保留所有的#pragma编译器指令,因为编译器需要使用他们
经过预编译后的.i文件不包含任何宏定义,因为宏定义已经被展开,并且包含的文件也已经被插入到.i文件中
二、编译
编译过程就是把预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后产生相应的汇编代码文件,这个过程往往是我们所说最核心最复杂的部分。
一般来说,每个源文件都对应于一个中间目标文件(.o文件或是.obj文件)
三、汇编
汇编器是将汇编代码转变成可以执行的指令,每一个汇编语句几乎都对应一条机器指令。
四、链接
现代软件开发规模很大,都放一个.C文件里无法想象。在一个程序被分割为多个模块后,这些模块如何形成一个单独的程序是必须解决的!
模块之间如何组合的问题可以归结于模块之间的函数调用与变量访问。
由于在各个模块编译的过程中,编译器并不知道它们的地址,所以它暂时将这些地址搁置。等待最后链接的时候由编译器去将这些指令目标地址修正。
总而言之,链接就是那些目标文件之间相互链接自己所需要的函数和全局变量,而函数可能来源于其他目标文件或库文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值