`
wangshaofei
  • 浏览: 282416 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

C语言编译过程

    博客分类:
  • php
阅读更多


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语言编译过程详解.docx

    c语言编译全过程

    预处理阶段是C语言编译过程的第一步,它主要负责处理源代码中的预处理器指令。这些指令以`#`开头,用于指示预处理器进行相应的操作。 - **宏定义**:通过`#define`来定义宏,可以为标识符指定一个字符串替换值。...

    C语言编译全过程

    ### C语言编译全过程详解 #### 一、概述 C语言是一种广泛使用的编程语言,它提供了高效的性能和灵活的控制机制。C语言程序从源代码到可执行程序的转变过程称为编译链接过程。这一过程包括编译和链接两个主要阶段,...

    c语言编译过程想详解

    详细讲解c语言的编译过程,并附有图解 很好的资料

    C语言编译过程总结详解

     从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。  编译过程  编译过程又可以分成两个阶段:编译和会汇编。  编译  编译是读取源程序...

    C语言编译全过程.pdf

    编译预处理是C语言编译过程的第一步,主要涉及对源代码中的一些预处理指令进行处理。这些指令以`#`字符开头,常见的预处理指令包括宏定义、条件编译、头文件包含以及特殊符号处理等。 ##### 2.1 宏定义 宏定义允许...

    C语言编译全过程剖析

    C语言编译过程大致分为四个主要阶段: 1. **预编译**: - 预编译程序处理源代码中的伪指令,例如宏定义(#define)、条件编译指令(如#ifdef)、头文件包含(#include)和特殊符号。宏定义用于文本替换,条件编译...

    C语言编译过程中的错误分析

    C语言编译过程中的错误分析 C语言编译过程中的错误分析是C语言学习中非常重要的一部分。通过对C语言的学习和实践,人们会积累一些常见的错误,这些错误可能会导致编译错误、运行错误或逻辑错误等问题。本文将总结...

    C语言 编译出错信息一览表

    本篇主要介绍C语言编译过程中的三类错误:严重错误、一般错误和警告。 1. 严重错误 严重错误通常涉及到编译器的内部错误,如`Bad call of inline function`,这意味着不正确地调用了宏定义的内部函数,或者`...

    C语言笔试之编译相关试题

    1. **预处理**:预处理(Preprocessing)是C语言编译过程的第一步,它主要处理以`#`开头的指令,例如`#include`、`#define`和`#if`等。预处理器会将`#include`指令替换为所包含文件的内容,`#define`用来定义宏,`#...

    (C语言编译连接过程

    在深入探讨C语言的编译连接过程之前,我们先来明确这一流程的重要性。编译连接过程是将人类可读的源代码转换为计算机能够执行的机器语言的关键步骤,它不仅涉及语法检查、优化,还涉及到多个文件的整合,确保程序...

    C语言编译调试指南编译调试指南编译调试指南

    一、C语言编译过程 C语言的编译通常包含四个主要步骤: 1. **预处理(Preprocessing)**:预处理器(cpp)会处理源代码中的宏定义、条件编译指令(如`#if`, `#ifdef`, `#endif`)以及包含其他头文件(`#include`)...

    C语言函数与编译预处理

    编译预处理是C语言编译过程中的一个重要步骤。在编译之前,预处理器会将源代码中的宏定义、include 语句和条件编译指令替换为实际的代码。预处理器还可以处理多文件程序,生成目标代码。 四、实验内容 实验内容...

    C语言编译为NES(cc65-2.12.0-1)

    标题 "C语言编译为NES(cc65-2.12.0-1)" 指的是使用C语言编写代码,然后将这些代码编译为目标平台...通过学习如何用C语言编译为NES,开发者不仅可以重温复古游戏的开发过程,也能学习到系统级编程和硬件交互的宝贵经验。

    C语言编译工具-TC2.0

    然而,对于学习C语言基础和理解编译过程的初学者来说,TC2.0仍然具有很高的教育价值。 在C语言编译工具的发展历程中,TC2.0是一个里程碑式的存在。它不仅帮助了无数人入门C语言编程,也为后来的编译器设计提供了...

    turboc2 c语言编译模拟器

    【标题】:“Turboc2 C语言编译模拟器”是一款经典的C语言开发工具,它集成了编译器和模拟器功能,为程序员提供了一个高效、便捷的编程环境。Turbo C 2.0是Borland公司推出的一个早期版本,它在当时因其轻量级、快速...

Global site tag (gtag.js) - Google Analytics