C
语言是一种高级语言,并且是编译型的语言。即一个用
C
写出来的源文件形式的代码,是可以被我们读懂的,但是如果想让机器也能读懂认识,就必须被转换为能够被机器认识的格式--机器语言指令。而完成这个转换工作的,就是
C
编译器。编译的过程如下图所示。
从上图可以看出,将一个
C
文本源文件,转换到一个可执行目标程序,一共需要经过四个阶段。
1.
预处理阶段
预处理器查找源文件中以‘#’开始的行,并以实际的代码替换掉这些以‘#’开始的命令。比如,
hello.c
中假设第一行为
#include <stdio.h>
,预处理器在读到这里的时候,会用实际的
stdio.h
文件的内容替换掉
#include <stdio.h>
这一行代码,而得到一个新的
C
源文件,即
hello.i
。
2.
编译阶段
在该阶段,将文本文件
hello.i
翻译成文本文件
hello.s
,
hello.s
是一个汇编语言程序。汇编语言程序中的每条语句都以一种标准的文本格式确切的描述了一条低级机器语言指令。因此,现在虽然有各种各样的编程语言,但编译时,最终都是要被翻译为通用的汇编语言的。
3.
汇编阶段
这个时候,汇编器就会将
hello.s
翻译为机器语言指令了,并把这些指令打包成可重定位的目标程序格式
hello.o
。这个文件是二进制的文件,它的字节编码就是机器语言的指令了,而不是字符了。
4.
链接阶段
在
hello.c
程序中,我们调用了标准库里的函数,
printf
,而
printf
函数存在于
printf.o
的目标文件中,这样的话,我们就必须提供某种方法,将
printf.o
加入到
hello.o
中。而这个工作就是由连接器完成的。连接器将所有用到的相关的
.o
都链接成一个可执行的目标文件,这个目标文件加载到
memory
以后,就可以执行了。
(参考《深入理解计算机系统》)
分享到:
相关推荐
c语言编译过程详解.docx ,c语言编译过程详解.docx
C语言编译全过程
c语言编译全过程c语言编译全过程c语言编译全过程
详细讲解c语言的编译过程,并附有图解 很好的资料
从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。 编译过程 编译过程又可以分成两个阶段:编译和会汇编。 编译 编译是读取源程序...
C语言编译连接过程描述了
编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。
技术资料 \C语言ppt\C语言编译全过程.pdf 学习C
C语言编译过程中的错误分析,语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程
从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。 编译过程 编译过程又可以分成两个阶段:编译和会汇编。 编译 编译是读取源程序...
我们的代码会经过这4个环节,从而形成最终文件,c语言作为编译语言,用来向计算机发出指令。让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。预处理展开头文件/宏替换/...
编译原理 词法分析 语法分析 优先分析表 中间代码生成
c语言 编译原理 分词 定义Token表示右部的值。 检查语义错误: (标识符声明、定义和使用) 没有声明;重复声明;类型不相容 符号表 (标识符名,地址,类型) 过程:读入Token 遇到标识符声明时,检查是否已...
大家都知道把C文件写好编译生产HEX文件,就能跑代码了,哪知道编译的过程吗?作为嵌入式开发工程师知道编译的过程还是很有必要的
C语言的编译过程 编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行...
C语言的编译过程很有趣,从预处理,编译,汇编,链接,每一步都很重要,但是很少人关注这些。这是我自己总结的,希望能帮到大家!