您的位置:首页 > 编程语言 > C语言/C++

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

2019-01-07 15:32 1116 查看

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

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

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

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

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

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

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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: