C++工程从代码到可运行文件要经历四个过程,分别是预编译、编译、汇编、链接。
1、预编译
(1)将所有的#define删除,并展开宏定义。意味着代码替换。
(2)处理所有的条件预编译指令,比如常见的#ifndef、#endef。
(3)处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。
(4)删除所有的注释。
(5)添加行号和文件名标识。
2、编译
(1)词法分析,将源代码的字符序列分割成一系列的记号。
(2)语法分析,对记号进行语法分析,产生语法树。
(3)语义分析,判断表达式是否有意义。
(4)代码优化。
(5)目标代码生成,生成汇编代码。
(6)汇编代码优化。
3、汇编
(1)将汇编代码转化成机器指令
4、链接
(1)将不同源文件产生的目标文件执行链接,最终生成一个可执行文件。
分为静态链接和动态链接,依赖的是静态库(.lib)和动态库(.dll)。静态链接是在程序打包的时候就将要调用的函数一起打包进可执行文件,这样即使删了静态库,单独一个程序也可以运行。动态链接是在程序运行的时候才去加载所需的函数符号,因此程序运行要依赖动态库。所以这样的话静态链接的程序大小要比动态链接来得大。