为了在系统上运行C语言程序,每条C语言语句都被其他程序转化为一系列低级机器语言指令, 然后这些指令按照一种被称为可执行目录程序的调格式打包好,并以二进制文件的形式存放起来。 目标程序也被称为可执行目标文件。
#include<stdio.h>
int main()
{
printf("%s\n","hello world!");
return 0;
}
预处理阶段:
原始的源文件(文本)
预处理器(cpp)根据字符#开头的命令,修改原始的C语言程序。如#include<stdio.h>告诉ccp读取系统头文件stdio.h中的内容,并将其插入程序中,得到一个以i为扩展名的C语言程序;
编译阶段: 编译器(ccl)将修改后的后缀为i的C语言文件翻译成一个汇编语言程序,文件后缀为s。
汇编阶段: 汇编器(as)将汇编语言程序翻译为机器语言指令,这些指令打包成一种可重定位目标程序的格式,并保存在一个扩展名为o的二进制文件中,也叫目标文件。
目标文件
链接阶段: hello程序调用了函数标准库中的printf函数。prinf函数存在于一个名为printf.o的预编译好的目标文件中,而该文件通过链接器(ld)合并到hello.o文件中,得到hello可执行文件,并被加载到内存中,由系统执行。
链接文件
项目相关文件
VC开发工具自动生成的中间文件,保存的是IDE自动提示的信息
Visual Studio Build Log File 文件是最常用的文件类型,Windows 10 操作系统用户和 China中的用户最有可能使用Visual Studio Build Log File文件。
可执行文件
预编译头文件(一般扩展名为.PCH),是把一个工程中较稳定的代码预先编译好放在一个文件(.PCH)里
“PDB(Program DataBase),全称为“程序数据库”文件,是VS编译链接时生成的文件。 DPB文件主要存储了VS调试程序时所需要的基本信息,主要包括源文件名、变量名、函数名、FPO(帧指针)、对应的行号等等
了解编译的作用:
- 优化程序性能;
- 理解链接时出现的错误;
- 避免安全漏洞。