程序编译
程序的编译流程大体可分为编辑、预处理、编译和链接4个步骤。
1. 编辑
编辑程序:将源文件输入计算机进行修改和保存的过程就称为“编辑”。
2. 预处理
预处理器是在真正的编译开始之前由编译器调用的独立程序。预处理器可以删除注释、包含文件以及执行宏替代。
预处理器在编译器之前根据指令更改程序文本。编译器看到的是预处理器修改过的代码文本。
"#include "、"#define "等都属于编译预处理。预处理行尾不加分号。原则上预处理行可以写在程序的任意位置,但推荐写在文件头部。常用的预处理指令如下所示:
1) 头文件包含,#include <iostream>
2) 宏,#define PI 3.14
3) 条件编译,#ifndef _FUNC_H_ #define _FUNC_H_ #endif
4) 其他,如#pragma
3. 编译
编译用于将每个编译单元翻译成二进制代码文件。在DOS和Windows环境下,二进制代码文件的后缀名为 .obj;在UNIX环境下,其后缀名为 .o 。
编译器处理的对象其实是由单个 .cpp文件和其中递归包含的头文件组成的编译单元。当以个 .cpp文件在编译时,预处理器首先递归包含头文件,形成一个含有所有必要信息的单个源文件,这个源文件就是一个编译单元。这个编译单元会被翻译称为一个与 .cpp文件同名的目标文件(.o或是.obj)。
每个 .cpp文件对应一个编译单元,而每个编译单元都会生成一个二进制代码文件。所以,每个 .cpp文件对应着一个二进制代码文件。
4. 链接
链接程序的作用是将编译得到的零散的二进制代码文件组合成二进制可执行文件(.exe)。它有两方面的意义:
1) 对编译单元中的函数、变量进行解析;
2) 建立与库函数的链接
链接是为程序中的变量的函数分配绝对地址,使二进制文件可执行的过程。