一、程序的编译环境和执行环境
在标准C的任何一种实现中,存在两个不同的环境。
- 翻译环境:该环境将源代码转换为机器可执行的机器指令(二进制)。
- 执行环境:用于实际执行代码。
我们要清楚计算机能够执行二进制指令的。但是我们写出的C语言代码是文本信息,由各个字符组成,计算机不能直接理解。所以需要翻译环境去将C语言的代码转换为二进制的指令。接着在执行环境中执行二进制的代码。
二、详解编译和链接
1、翻译环境:
.c文件经过编译器单独处理后变成.obj目标文件,接着用链接器将这些目标文件链接在一起形成了可执行程序,下标.exe文件。
翻译环境主要分为两大类:
第一大类是编译,编译又分为三个小部分,分别是预编译(预处理)、编译和汇编。
第二大类就是链接
预编译:生成test.i文件
功能:注释的删除、#include 头文件的包含、#define符号的替换。
注意所有的预处理指令都是在预处理阶段处理的,完成一些文本操作。
编译:生成test.c文件
功能:把C语言/C++代码翻译成了汇编指令(语法分析、词法分析、语义分析、符号汇总)
汇编:生成test.o文件
在Linux环境下生成.o文件,在VS编译器上我们生成的是.obj文件(目标文件)
目标文件中存放的都是二进制的指令。把汇编代码翻译成了二进制的指令,形成符号表