用C语言构建一个可执行程序的流程!

本文详细介绍了C语言构建可执行程序的流程,包括编译器前端的词法和语法解析,生成中间代码,编译器后端的目标文件创建,以及链接器如何将目标文件合并成最终的可执行文件。中间代码的存在有利于程序的跨平台移植,而连接器则可以处理来自不同编译器的目标代码,只要ABI一致,即可生成可执行文件。
摘要由CSDN通过智能技术生成

从用C语言写源代码,然后经过编译器、连接器到最终可执行程序的流程图大致如下图所示。

C语言源代码编译流程图

从图中我们可以清晰地看到C语言编译器的大致流程。

首先,我们先用C语言把源代码写好,然后交给C语言编译器。C语言编译器内部分为前端和后端。

 

编译器前端

前端负责将C语言代码进行词法和语法上的解析,然后可以生成中间代码。

中间代码这部分不是必须的,但是它能够为程序的跨平台移植带来诸多好处。

比如,同样的一份C语言源代码在一台计算机上编译完之后,生成一套中间代码。然后针对不同的目标平台(比如要将这一套代码分别编译成 ARM 处理器的二进制机器码、MIPS 处理器的二进制机器码以及 x86 处理器的二进制机器码),只需要编写相应目标平台的编译器后端即可。

所以,这么做就可以把编译器的前端与后端剥离开来(这在软件工程上又可称为解耦合),不同处理器厂商可以针对自家的处理器特性,对中间代码生成到目标二进制代码的过程再度进行优化。

 

编译器后端

接下来,由C语言编译器后端生成源文件相应的目标文件。

目标文件在 Windows 系统上往往是.obj文件,而在 Unix/Linux 系统上往往是.o文件,C语言的源文件在所有平台上都统一用.c文件表示。

 

链接器

最后,对于各个独立的目标文件,通过连接器将它们合并成一个最终可执行文件。

连接器与

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值