C语言的编译过程其实就是一个翻译的过程,将我们可以理解的高级语言代码转换成为计算机可以理解的机器代码的过程。本章节主要描述的是C语言的编译有哪些过程。
以下整张图描述了C语言程序编译的完整过程,包括:预处理、编译、汇编和链接。
预编译:
编译过程实现进行预处理,预处理后生成后缀为.i的临时文件,主要完成:
1)删除所有的注释。因为注释不属于程序代码,它们对程序的运行无任何作用。
2)宏展开,将所有的#define删除,并且展开所有的宏定义。
3)文件包含:将#include指令的包含文件,将对应文件的源码添加到文件中,从而替换掉#include指令。
编译:
编译阶段对预处理文件进行词法分析、语法分析和语义分析、源代码优化、底阿妈生成、目标代码优化。
1)分析关键字、标识符等是否合法。
2)分析表达式是否遵循语法规则。
3)语法分析的基础啥进一步分析表达式是否合法。
????分析结束后进行代码优化生成相应汇编代码。
汇编:
使用汇编程序将.s文件代码转换成机器可以理解的代码(机器代码)。汇编程序时也预先编写的程序,它家汇编代码转换成机器代码。这种机器代码可以在计算机上执行,每条汇编语句几乎都能对应一条机器指令。
链接:
链接是将库文件与汇编生成的目标文件合并生成可执行文件。
创建工程如下所示。
设置输出汇编语言文件。
设置输出预处理文件.i文件
输出内容如下所示:
扩展源代码:main.i
汇编语言:main.asm
目标代码:main.obj
可执行文件:main.exe
注意:勾选了输出预处理文件之后,不能生成.obj文件。