您的位置:首页 > 其它

程序是如何编译执行的,背后都发生了什么

2017-08-14 12:04 288 查看
一个程序从源文件test.c到可执行程序test.o,一共经历了以下步骤:


这是一个源程序到可执行程序所经历的过程,但是这每个小阶段,编译器都做了些什么呢?

1.预处理器处理:

1).头文件的包含,预处理指令#include用于处理头文件的包含,头文件有两种形式,< xxx>和“xxx”,#include< xxx>所包含的头文件,是告诉编译器,该头文件所包含的内容从系统中去查找,#include”xxx”,是告诉编译器,该头文件所包含的文件先从用户目录去寻找,如果没有,再去系统中找;

2)#include 预处理标识符的替换;

3).宏的替换,宏在预处理阶段,宏就在源文件中完全展开;

4).注释删除;

这个阶段生成 .i文件

2.编译阶段:

1).语法分析;

2).词法分析;

3).语义分析;

4).符号分析;

也就是在这个阶段检查代码的语法错误,缺少符号等错误;这个阶段生成的是 .s文件;把代码转换成汇编代码;

3.汇编阶段:

1).汇编转换成二进制文件;

2).符号表的合并;

4.链接:

1).合并段表;

合并段表就是编译器需要传递编译后的全部二进制代码的段表,连接器将所有的段表合并;

2).符号表的合并和符号表的重定义;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编译器 处理器