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

本文详细介绍了C程序从源文件到可执行程序的全过程,包括预处理器处理、编译阶段、汇编阶段及链接阶段的具体操作。文章解释了各阶段如何处理头文件、宏替换、语法分析等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值