前言:
编译和链接是计算机程序开发中的两个重要步骤,用于将源代码转化为可执行的程序。
翻译环境: 是指在开发计算机程序时所使用的工具和设置的集合。它包括开发者用来编写、测试和调试代码的软件工具,,如文本编辑器、集成开发环境(IDE)、编译器、调试器等。
运行环境: 运行环境是指在计算机上执行已编译程序时的环境和设置。
⼀个C语⾔的项⽬中可能有多个.c⽂件⼀起构建,那多个.c⽂件如何⽣成可执⾏程序呢?
编译⼜分为:预处理(或预编译)、编译、汇编三个过程。
预处理是计算机程序编译过程中的第一个阶段,它主要负责对源代码文件进行一些文本处理操作,以准备将源代码转化为目标文件的过程。
#define PI 3.14159265359
double circle_area = PI * radius * radius;//圆形面积
在预处理之后,上述代码将被替换为:
double circle_area = 3.14159265359 * radius * radius;
#include
预处理会将 <stdio.h> 中的内容插入到当前源代码文件中。
#define MAX_VALUE 100//MAX_VALUE
int value = MAX_VALUE;
//预处理会将 MAX_VALUE 替换为 100
编译过程中的词法分析、语法分析、语义分析和代码生成是编译器中的核心步骤,这些步骤将源代码转化为机器可执行的目标文件。
假如有以下一段代码:
array[index] = (index+4)*(2+6);
在词法分析阶段,编译器会将源代码分解成词法单元(令牌)。
上⾯程序进⾏词法分析后得到了16个词法单元:
词法单元 | 类型 |
---|---|
array | 标识符 |
[ | 左方括号 |
index | 标识符 |
] | 右方括号 |
= | 赋值运算符 |
( | 左括号 |
index | 标识符 |
+ | 加法运算符 |
4 | 整数常量 |
) | 右括号 |
* | 乘法运算符 |
( | 左括号 |
2 | 整数常量 |
+ | 加法运算符 |
6 | 整数常量 |
) | 右括号 |
; | 分号 |
接下来语法分析器,将对扫描产⽣的记号进⾏语法分析,从⽽产⽣语法树。这些语法树是以表达
式为节点的树。
语义分析阶段检查代码中的语义错误和类型匹配。
对于这个代码片段,它可能执行以下检查:
在这个阶段,编译器将生成的中间表示(通常是汇编代码)转化为目标机器的二进制机器代码,这个二进制代码可以在计算机上执行。
在编程中,链接是将多个目标文件或库文件合并成一个可执行文件或共享库的过程。链接是编译过程的最后一步,它将不同的目标文件和库文件整合在一起,以创建最终可运行的程序或共享库。
步骤包括:目标文件生成、地址和空间分配,符号决议和重定位等这些步骤。具体的不再深入讲解
如果你喜欢这篇文章,点赞+评论+关注⭐️哦!
欢迎大家提出疑问,以及不同的见解。