简单剖析程序的翻译过程!

本文详细介绍了程序从源码到二进制执行的四个步骤:预处理(包括头文件展开、宏替换和去注释)、编译、汇编和链接。通过gcc指令举例说明每个阶段的操作及其作用。

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

本文旨在讲解一段源程序如何翻译成机器所能识别的二进制的命令的,希望通过本文,能使读者对一段程序的翻译过程有进一步的认识!


这里首先要介绍的是一段程序从编写完成到执行需要经过以下几个步骤!

1.预处理

首先讲到的是预处理!预处理在整段翻译的过程中主要有着以下几种功能!

1.1头文件的展开

1.2宏替换

1.3去掉注释

1.4条件编译

下面我将通过简单的代码进行对预处理阶段所做的事情做出证明!

下图为linux环境下的代码,有兴趣的小伙伴也可以自己下来试试看看!

通过本图,小伙伴们可以发现原来注释的代码在经过预处理之后就没有了,并且在进行编译之后由以前的十几行代码直接增加到了八百多行!这是因为预处理将头文件展开了,所以代码行数也自然就增加了!还有最后打印的Max的时候,经过预处理之后被替换掉了!!!还有一点条件编译没有展现出来,那么通过以下代码就可以来看出预处理也对条件编译做出了相应的处理!

        

通过以上代码我们可以看出,当进行预处理的时候,编译器也会对条件编译进行优化!对于条件编译,它实现了动态切割代码的功能!正如我们日常使用的好多软件,都分为会员版与免费普通版,那么对于程序员来说,如果维护这几种不同版本

的代码,那么代价肯定是非常大的!所以条件编译就起到了作用!仅仅就需要维护一份代码就可以满足需求!

至此,预处理阶段的工作简单介绍到这里!


2.编译

现在就来介绍编译的功能!

编译的功能就是将源代码转化为汇编语言的代码!

通过下图我们可以看出编译阶段所做的事情!

虽然我们可能没有学习过汇编代码,但是通过右图的风格,我们不难看出,编译阶段将c代码转化为了汇编代码!

编译的作用就是将c代码转化为了汇编代码!

3.汇编

汇编的作用是将汇编代码转化为可重定位的二进制文件!

下图为可重定位的概念!

通过下图我们可以看出这里汇编的作用确实是将汇编代码转化为了二进制文件!

可以看出经过汇编之后,汇编代码就变成了二进制的文件!只能通过二进制的格式进行读取!

4.链接

最后要将的链接就是结合以上过程,最终形成我们日常看见的.exe后缀文件!


至此,通过上文,已经将程序的翻译过程简单了介绍!

下面我来为大家为大家补充如何使用指令来进行证明这些过程!

//


gcc -E test.c  -o code.i;

gcc -S code.i  -o code.s ;


gcc -c code.s -o code.o;

下面来介绍其中代码的含义!

其中 -E 操作,是仅仅进行预处理操作!当预处理结束之后,就停止, -o code.i  的作用是生成一个.i后缀的文件!其中.i 通常是经过预处理之后的后缀标志!

-S 操作是进行编译操作!  此时可以直接使用code.i文件进行编译!当然使用test.c 文件也是没有问题!

-c 操作是进行汇编操作!生成目标文件!


至此,本文对程序的翻译过程介绍结束,希望读者能有所收获!也欢迎大家评论区多多讨论!

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值