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

来源:互联网 发布:厦门哪里看海最好 知乎 编辑:程序博客网 时间:2024/05/22 10:50

一个程序从源文件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).符号表的合并和符号表的重定义;

阅读全文
0 0
原创粉丝点击