睡前一更。趁着我还没忘掉(三)要写什么。那么(三)里就讲C语言的编译过程吧。
要讲C语言程序的编译过程,让我们先来看两个概念机器语言和汇编语言。
机器语言(machine language)是一种指令集的体系。这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据。(摘自百度百科)
我们知道计算机内部储存数据使用的是二进制01000100之类的指令,这对于我们来说很难懂,但是对于电脑,这是它最能理解的语言,我们所写的程序代码最终都会被转化为这种语言。
汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
汇编语言是一种低级语言,是由于使用机器语言编程过于复杂,便诞生了汇编语言作为代替,当然对于我们来说还是太复杂。所以现在就有了各种高级语言,我们学习的C语言就是一种高级语言。有兴趣的可以看一下汇编语言,相对于C语言来说实在是复杂。我们所编写的C语言程序将会在编译中首先翻译为汇编语言然后再翻译为机器语言。
过程就是这样的:
C语言--->汇编语言--->机器语言。
当然这是检查过程序错误后的编译阶段,在检查之前还有预处理阶段。也就是我们写在主函数之前的部分以“#”开头的命令。
以#include<>为例,预处理器将<>中的内容粘贴进你编写的C程序使得你可以直接调用头文件中的函数等东西。
粘贴这个词用的很形象,意思就像是本身你的文章中没有写这个内容,但是你现在需要这个内容但你又懒得写,于是就直接截取了一段,粘贴在了你空给这部分内容的地方。当然这部分借来的代码会和你写的代码一起转换为汇编语言和机器语言。
最后对上面内容进行一个总结:
图片来自C Primer Plus
按照图片解释:
源代码即自己写的代码,经过编译器处理后变为机器语言。然后链接器(可将你所写的代码和为了形成完整程序所需要的其他代码合成为一个文件)将库代码(来自头文件)和启动代码(程序与系统的接口,程序运行所必须的内容)与程序链接在一起形成一个完整的可执行的程序。
可以参考下面的链接来更深入的了解内容:
http://blog.csdn.net/qq_31108501/article/details/51841983
http://blog.csdn.net/xiaofei0859/article/details/50556737
https://www.cnblogs.com/CarpenterLee/p/5994681.html