一、编译预处理(处理#,.C/C++ ---> .i)
1、进行代码文本的替换和拷贝工作,处理#开头的指令,生成预编译文件(.i文件):
(1)展开宏(#define);(2)处理条件编译(#ifdef);(3)插入头文件(#include)。
2、其他操作:
(1)删除注释;
(2)添加行号和文件标识。比如:#2"hello.c"2,以便于编译时编译器产生调试用的行号信息及用于编译时产生编译错误或警告时能够显示行号。
(3)保留"#pragma"。保留所有的编译器指令,留给编译器处理。
二、编译(查错,.i ---> .s)
编译阶段主要进行错误检查和生成汇编命令,生成汇编文件(.s文件)主要会进行:
(1)词法分析、语法分析、语义分析;
(2)函数查错;
(3)生成汇编指令;
(4)代码优化;
(5)生成符号
三、汇编(翻译,.s ---> .o)
将编译过程形成的汇编指令翻译成为机器指令,将汇编文件(.s)翻译目标文件(.o);生成符号表以及各个段。
四、链接(.o ---> .exe)
又称为找符号,链接出错的常见原因:(1)函数没写;(2)名字写错:(3)符号重定义