前言
在我之前的一篇文章中,写到了目前主流语言的优缺点,那其实对于语言来说,剖析到最底层,都是二进制,只是语法不同,那计算机是怎么区分语言,在程序写好到结束中间,发生了哪些事情?本篇文章从C语言角度出发,剖析一下从写好程序到运行发生了哪些事情。
程序环境
在ANSI C下的任何程序当中,都有两种不同的环境:
1. 翻译环境:这个环境当中可以将程序的源代码转换成可执行的机器指令。
2. 执行环境:它用于实际执行代码。
翻译环境
翻译环境可以将程序翻译成可执行的机器指令,对于其他语言也是这样,只有翻译成可执行的机器指令,计算机才可以识别,那C语言的翻译阶段是这样的:
在C语言中,翻译的大致过程就如上图所示,在程序写好进行编译的时候,会编译器(集成开发环境)会对每个程序文件(.c)单独进行翻译,翻译成一个目标文件(在windows环境下面后缀是.obj),每个目标文件都进过链接器,链接器外部接链接库,通过链接库和链接器生成一个可执行程序(.exe)。
翻译环境分类
翻译环境大致分为编译和链接两个阶段
编译
编译时翻译环境最开始的阶段,他分成三个步骤:
1. 预编译(预处理)
2. 编译(处理)
3. 汇编