今天跟大家唠一唠编译和链接这个话题。
我们的代码在实现之前会经历几个过程:首先文件传输过来,会先将文件进行翻译,之后再运行出来。在翻译过程中就涉及到了编译和链接。
我们了解编译和链接后,可以方便我们理解计算机代码实现的原理。
在编译过程中又可以细分成 预处理、编译、汇编 的环节。
预处理
1.预处理会将#define删除,并将define宏定义的内容给展开。
2.预处理将处理所有条件指令,例如:#if,#ifdef 等等。
3.预处理会处理#include的指令,并且这个过程是递归进行的,也就是说包含的头文件中也可能包含其他文件。
4.预处理将删除所有的注释。
编译
编译会对文件进行一系列的:词法分析,语法分析,语义分析,生成相应的汇编代码文件。
词法分析
词法分析中会分辨出里面包含的用词,举个例子:
语法分析
语法分析会对扫描的记号进行语法分析,从而产生语法树。
还是以这个为例子,语法树将是这样的:
语义分析
由语义分析器来完成语义分析,即对表达式的语法层面分析。
汇编
汇编器是将汇编代码转转变成机器可执行的指令,每⼀个汇编语句几乎都对应⼀条机器指令。
链接
链接的过程很复杂,链接过程主要包括:地址和空间分配,符号决议和重定位等这些步骤。最后链接后的结果就是可执行程序。
这里浅的谈了一下编译和链接的内容,深入提及也是个很复杂的问题。希望这篇文章能给大家初步了解这个概念,如果有帮助的话不妨给个小红心呗!谢谢啦!!