C++与C语言类似,一个C++程序从源码到执行文件,有四个过程,预编译、编译、汇编、链接
首先,预编译:
(1) 将所有的#define删除,并且展开所有宏定义
1 | #define NUM 17 |
(2) 处理所有的条件预编译指令,如#if、#ifdef
1 | #ifndef HEADER_FILE_NAME_H |
(3) 处理#include预编译指令,将被包含的文件插入该预编译指令中,这也是为什么第二点中会发生重复定义
(4) 过滤所有的注释//
(5) 添加行号和文件名标识
其次,编译
(1) 词法分析:将源代码的字符序列分割成一系列的记号
(2) 将预处理后的中间文件转换成汇编语言
(3) 这个步骤将源代码翻译成机器语言。生成对应的目标文件
然后,汇编
这个过程主要将汇编代码转换成机器可以执行的指令
最后,链接
将不同的源文件产生的目标文件进行链接,从而形成一个可以执行的程序。
(1) 静态链接: 链接的时候就把调用的函数或者过程链接到了生成的可执行文件的执行;生成的静态链接库
(2) 动态链接,是在链接的时候没有把调用的函数代码链接进去,而是在执行的过程中,找要链接的代码
通俗点讲就是:静态链接直接把头文件复制进去,而动态链接是可执行文件包含对库函数的引用,但实际的库文件不被复制,由操作系统动态地加载和链接这些库文件。各有优缺点。