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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值