1.翻译环境和运行环境
- 翻译环境:将源代码转化为可执行的机器指令
- 运行环境:用于执行机器指令
1.1 翻译环境
翻译环境由编译和链接两大过程构建,编译又可以分为三大过程:
- 【1】预处理(预编译)
- 【2】编译
- 【3】汇编
不同的.c文件经过编译器处理后形成.obj目标文件(windows环境)
多个目标文件和链接库一起经过链接器最后生成可执行程序
链接库是指运⾏时库(它是⽀持程序运⾏的基本函数集合)或者第三⽅库
1.2 运行环境
程序载入内存,由操作系统完成,程序执行从main函数开始,直到正常运行完成或者异常结束
1.3 预处理(预编译)
- 将所有的 #define 删除,并展开所有的宏定义。
- 处理所有的条件编译指令,如: #if、#ifdef、#elif、#else、#endif 。
- 处理#include预编译指令,将包含的头⽂件的内容插⼊到该预编译指令的位置。这个过程是递归进⾏的,也就是说被包含的头⽂件也可能包含其他⽂件。
- 删除所有的注释
- 添加⾏号和⽂件名标识,⽅便后续编译器⽣成调试信息等。
- 或保留所有的#pragma的编译器指令,编译器后续会使⽤。
//如:
#define N 3
int main()
{
int n = N;
printf("%d\n", n);
return 0;
}
// 经过预处理后
// #define N 3 被删除
int main()
{
//int n = N; 被替换为下面代码
int n = 3;
printf("%d\n", n);
return 0;
}
1.4 编译
编译过程中会经过一系列的处理
词法分析,语法分析,语义分析及其优化
如以下分析:
int arr[10] = { 0 };
arr[1] = 2 * 6;
最后经过语法分析和语义分析进行下一步
1.5 汇编
将所有的代码语句转化为机器语言
1.6 链接
将头文件和源代码都链接在一起最后生成可执行程序由运行环境执行