前言
嗨,我是firdawn,在本章中我们将介绍,C语言编译链接的翻译环境和运行环境,下面和往常一样是本章的思维导图,那么,宝子们,让我们开始今天的学习吧!
一,翻译环境
我们在编译器中写出的 .c 文件为文本文件,而计算机底层能执行的是二进制的可执行程序,如果一段代码需要运行,就需要转换为 .exe(Windown环境中) 的二进制可执行文件,那么这中间是如何转换的呢,转换过程如下图:
如果再把编译器展开成3个过程,那就变成了下⾯的过程:
1.1 预编译
在预处理阶段,源⽂件和头⽂件会被处理成为.i为后缀的⽂件。
1.2 编译
编译过程就是将预处理后的⽂件进⾏⼀系列的:词法分析、语法分析、语义分析及优化,⽣成相应的汇编代码⽂件。
1.2.1 词法分析
array[index] = (index+4)*(2+6);
1.2.2 语法分析
接下来语法分析器,将对扫描产⽣的记号进⾏语法分析,从⽽产⽣语法树。这些语法树是以表达式为节点的树。
1.2.3 语义分析
由语义分析器来完成语义分析,即对表达式的语法层⾯分析。编译器所能做的分析是语义的静态分
析。静态语义分析通常包括声明和类型的匹配,类型的转换等。这个阶段会报告错误的语法信息。
1.3 汇编
汇编器是将汇编代码转转变成机器可执⾏的指令,每⼀个汇编语句⼏乎都对应⼀条机器指令。就是根据汇编指令和机器指令的对照表⼀⼀的进⾏翻译,也不做指令优化。
1.4 链接
链接是⼀个复杂的过程,链接的时候需要把⼀堆⽂件链接在⼀起才⽣成可执⾏程序。
链接过程主要包括:地址和空间分配,符号决议和重定位等这些步骤。
链接解决的是⼀个项⽬中多⽂件、多模块之间互相调⽤的问题。
二,运行环境