c++源文件从文本阶段到可执行文件的过程

过程分为个阶段:

          预处理阶段····>编译阶段····>汇编阶段····>链接阶段

1)预处理阶段对源代码文件中的文件包含关系、预编译语句(宏定义)进行分析和替换,生成预编译文件。

 ····删除所有的#define,展开所有的宏定义

 ····处理所有的条件预编译语句#if、#else、#end if等

 ····处理所有的 “#include” 预编译指令 ,将文件内容替换到他的位置,这个过程是递归进行的。

 ····删除所有的注释 //

 ····保留所有的#pragma 编译器指令,如#pragma once是为了防止头文件互相引用

 ····添加行号和文件标识,便于编译器在编译时产生的错误能够显示出来

2)编译阶段对预编译文件进行编译,转为汇编代码,生成汇编文件。

 ····词法分析

 ····语法分析

 ····语义分析

 ····优化,比如 int a[1] = 0; int a[1] = 2; int a[1] = 3; 编译器会优化,认为只有一个int a[1] = 3;

 ····目标代码生成,生成汇编代码

 ····目标代码优化,对汇编代码进行优化,使用合适的寻址方式,使用位运算来代替乘法

3)汇编阶段将汇编文件转换为特定的机器指令,生成可重定位文件。

····将汇编指令翻译为机器码,生成 .o(windows)或者 .obj(linux)文件。

4)链接阶段将所有的可重定位文件和库进行链接,最终生成可执行文件。这里的链接位静态链接

猜你喜欢

转载自www.cnblogs.com/matthew-memorys/p/12458208.html