编译原理的学习总结(默认编译c语言)

第一章 编译流程
.c文件 到可执行文件的第一步
1: 预处理过程
使源程序.c文件 没有条件编译 (即去除某一段不符合条件的代码块)
进行宏替换(将所有的宏定义 全部替换为确认值 或者函数)
头文件 的所有代码全部复制粘贴到.c文件中
忽略注释

预处理过程后 整个源程序文件 没有头文件 没有宏替换 没有条件编译 没有注释 只有纯粹的 语句或者理解为语句的语法

2:编译过程
这个过程的输入 就是 预处理过程中的 只有语法语句的文件 这个描述的是一个过程 指的是 将这个输入文件 ----->汇编语句或者是机器代码的过程 称为编译
将这个(预处理后的)文件 从左向右依次读取每一个字符 形成一个字符流 这个字符流作为下一个阶段的输入
由于编译过程非常复杂 这里阐述大致过程

总之编译结束后生成一个全是汇编代码的文件(obj 感觉上是对象文件 或者是 目标文件) 这个代码文件与操作系统无关也不是用来执行的 也是作为生成可执行文件的一个输入

3:汇编过程
这个过程就是将上一个阶段生成的汇编源代码 借助汇编指令转化为一个可重定位的机器代码
(注: 可重定位 在内存中的起始地址不固定 使得代码可以移植)

4:链接 / 加载
上一阶段生成的文件 如果是顺序执行的话 没有任何调用 比如全是声明变量语句或者是加减乘除 那么这一步 不要也可以 这一步解决的就是函数调用,引用其他文件 之类的 “引用问题” 你在某一个地方调用了某个函数 这个函数的定义在哪里? 这些事通过加载器 在可执行文件中增加 “指向” 函数定义的信息

这里将多个可重定位的机器代码文件(包括库文件 动态库DLL) 将修改后的指令和数据 加载到内存中去 可执行文件中只保留动态库的 “指针” ,只有调用信息
如此经历这四个转换过程 源代码文件可以被计算机识别成为一个可执行文件

以上全是个人理解 如果道友疑惑 欢迎讨论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值