编译原理

编译原理深度剖析:

程序的编译过程分为预处理、编译、汇编、链接四个阶段
-预处理:处理注释、宏、和代码中以#开头的
-编译:进行语法分析、词法分析、语义分析
-汇编:将汇编代码转为二进制文件(机器指令的目标文件)

在这里插入图片描述

我们以一个简单的程序展开说明、本程序在linux系统gcc编译器下执行、其它系统同理。

获得linxu系统安装文件、具体方法见文末
在这里插入图片描述
*************************************************************************************************************************************************************下面来具体讲解各部分内容

预编译:
处理所有注释、以空格代替
将所有的#define删除、并且展开所有宏定义
处理条件编译指令#if、#ifdef、#elif、#else、#endif
处理#include、展开被包含的文件
保留编译器需要的#pragma指令

预处理语法:gcc -E file.c -o file.i

生成.i文件

在这里插入图片描述

编译:
对预处理文件进行语法分析、词法分析、语义分析
词法分析:分析关键字、标识符、立即数等是否合法
语法分析:分析表达式是否遵循语法规则
语义分析:在语法分析的基础上进一步分析表达石是否合法
分析结束后对代码优化、生成相应汇编文件

编译实例:gcc -s file.i -o file.s

生成.s文件

在这里插入图片描述

汇编:
汇编器将汇编代码转变为机器的可执行指令
每条汇编语句几乎都对应一条机器指令、所以汇编语言执行效率较高

汇编实例: gcc -c file.s -o file.o

生成汇编文件

在这里插入图片描述

是不是此时我们就可以直接运行汇编生成的二进制文件了呢、其实不是、还需要进行最后一步:链接
将多个二进制文件链接一起执行

备注:由于链接过程较为复杂、我们放在下篇文章单独展开分析

获取更多资源关注公众号:如见青山如见君
获取方式:
虚拟机软件:后台回复:x001
Linux系统镜像文件:ubuntu版本 -> 回复: linux001
:centos版本 -> 回复:linux002
:RHEL版本 ->回复:linux003

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值