编译原理的学习总结(默认编译c语言)
第一章 编译流程
.c文件 到可执行文件的第一步
1: 预处理过程
使源程序.c文件 没有条件编译 (即去除某一段不符合条件的代码块)
进行宏替换(将所有的宏定义 全部替换为确认值 或者函数)
头文件 的所有代码全部复制粘贴到.c文件中
忽略注释
预处理过程后 整个源程序文件 没有头文件 没有宏替换 没有条件编译 没有注释 只有纯粹的 语句或者理解为语句的语法
2:编译过程
这个过程的输入 就是 预处理过程中的 只有语法语句的文件 这个描述的是一个过程 指的是 将这个输入文件 ----->汇编语句或者是机器代码的过程 称为编译
将这个(预处理后的)文件 从左向右依次读取每一个字符 形成一个字符流 这个字符流作为下一个阶段的输入
由于编译过程非常复杂 这里阐述大致过程
总之编译结束后生成一个全是汇编代码的文件(obj 感觉上是对象文件 或者是 目标文件) 这个代码文件与操作系统无关也不是用来执行的 也是作为生成可执行文件的一个输入
3:汇编过程
这个过程就是将上一个阶段生成的汇编源代码 借助汇编指令转化为一个可重定位的机器代码
(注: 可重定位 在内存中的起始地址不固定 使得代码可以移植)
4:链接 / 加载
上一阶段生成的文件 如果是顺序执行的话 没有任何调用 比如全是声明变量语句或者是加减乘除 那么这一步 不要也可以 这一步解决的就是函数调用,引用其他文件 之类的 “引用问题” 你在某一个地方调用了某个函数 这个函数的定义在哪里? 这些事通过加载器 在可执行文件中增加 “指向” 函数定义的信息
这里将多个可重定位的机器代码文件(包括库文件 动态库DLL) 将修改后的指令和数据 加载到内存中去 可执行文件中只保留动态库的 “指针” ,只有调用信息
如此经历这四个转换过程 源代码文件可以被计算机识别成为一个可执行文件
以上全是个人理解 如果道友疑惑 欢迎讨论
- (2017/3/19)现代编译原理C语言描述(虎书)chapter 3学习笔记
- 编译原理第一章学习总结
- 编译原理学习总结
- 编译原理第三章学习总结
- C语言编译工具学习总结
- 编译原理学习总结
- 硕彦博创学习笔记,C语言、编译原理、查找法排序
- 编译原理—第二章学习总结
- C语言学习笔记---001C语言的介绍,编译过程原理,工具等
- 编译原理第二章学习总结
- C语言编译过程总结详解(转帖)
- 深入浅出编译原理-5-一个简单语法分析器的C语言实现
- 编译原理学习导论
- Boost学习总结(一)VS2010环境下编译STLport和Boost
- 编译原理学习笔记13——(没有plan b的斧头帮—— LL分析法)——2014_1_29
- (转)【学习笔记】编译原理:编译程序概述
- 编译原理学习(三)--语法分析树
- C语言再学习3-编译&链接_PE加载
- 编译原理 总结
- Android之ListView原理学习与优化总结