示例代码:

#include<stdio.h>
int main(){printf(“hello world\n”);
}

流程图

前提

在计算中,任何的高级语言都不可以被计算机直接执行,都需要将高级语言转化成为计算机可以识别的计算机语言,所写的代码才可以执行。从此我们可以看出,高级计算机语言,并不是直接为计算机写的,而是为了程序员的方便。


编译共分为四个阶段:预处理阶段、编译阶段、汇编阶段、链接阶段。

1、预处理阶段:

主要工作是将头文件插入到所写的代码中,生成扩展名为“.i”的文件替换原来的扩展名为“.c”的文件,但是原来的文件仍然保留,只是执行过程中的实际文件发生了改变。(这里所说的替换并不是指原来的文件被删除)

2、汇编阶段:

插入汇编语言程序,将代码翻译成汇编语言。编译器首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,编译器把代码翻译成汇编语言,同时将扩展名为“.i”的文件翻译成扩展名为“.s”的文件。

3、编译阶段:

将汇编语言翻译成机器语言指令,并将指令打包封存成可重定位目标程序的格式,将扩展名为“.s”的文件翻译成扩展名为“.o”的二进制文件。

4、链接阶段:

在示例代码中,改代码文件调用了标准库中printf函数。而printf函数的实际存储位置是一个单独编译的目标文件(编译的结果也是扩展名为“.o”的文件),所以此时主函数调用的时候,需要将该文件(即printf函数所在的编译文件)与hello world文件整合到一起,此时链接器就可以大显神通了,将两个文件合并后生成一个可执行目标文件。


后续:

将可执行目标文件加载到内存中,并运行,即可完成输出的动作。

C语言源代码编译全过程相关推荐

  1. C语言编译全过程(转贴)

    C语言编译全过程 编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成 ...

  2. C语言编译全过程剖析

    一. 摘要 C语言编译的整个过程是非常复杂的,里面涉及到的编译器知识.硬件知识.工具链知识都是非常多的,深入了解整个编译过程对工程师理解应用程序的编写是有很大帮助的,希望大家可以多了解一些,在遇到问题 ...

  3. hex转换成C语言源程序吗,第6节:把.c源代码编译成.hex机器码的操作流程

    从业十年,教你单片机入门 第6讲: 第一步:打开一个现成的工程.双击桌面"keil uVision4"的图标启动keil软件,如果发现此软件默认打开了一个之前已经存在的工程,请点击 ...

  4. c语言编译为机器语言过程,C语言编译全过程

    C语言编译全过程 编译的概念 编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成 ...

  5. C语言编译全过程【转】

    C语言编译全过程[转] http://www.linuxdiyf.com/viewarticle.php?id=175655 编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级 ...

  6. 【CLR的执行模型:将源代码编译成托管模块】

    CLR:由多种不同编程语言使用的运行库 托管模块:中间语言和元数据 非托管语言:C/C++,不过此为特殊,可以写成托管代码 托管语言:C# 托管模块 1,PE32/PE32+头:PE32运行在win3 ...

  7. java 源码分析_Java 源代码编译成 Class 文件的过程分析

    原标题:Java 源代码编译成 Class 文件的过程分析 在上篇文章< Java三种编译方式:前端编译 JIT编译 AOT编译 >中了解到了它们各有什么优点和缺点,以及前端编译+JIT编 ...

  8. Linux源代码编译安装详解

    使用源代码编译安装软件有以下优点,获取软件的最新版及时修复bug,软件功能可按需选择或定制,有更多软件可供选择,源码包适用于各种平台. 工具/原料 一台装有Linux操作系统的电脑 接入互联网络并能正 ...

  9. android编译全过程

    android编译全过程 (2011-06-04 15:27) 标签:  android编译  android 模块编译,mm 命令 如果你只需要修改某一个模块的内容,但是却每次都要执行make, 最 ...

  10. 【AWSL】之Linux源代码编译及配置yum源(tar 解包、./configure配置软件模块、make)

    源代码编译 序言 一.源代码概述 1.使用源代码安装软件的优点 2.应用场合举例 3.安装源代码软件为什么使用编译安装 二.编译安装的基本思路 三.配置本地yum源仓库 四.`yum常用命令` 五.` ...

最新文章

  1. Mysql,SqlServer,Oracle主键自动增长的设置
  2. 计算机应用12班,《计算机应用基础》上机试卷A(10级机电8—12班)
  3. 开发打开设置洁面_用华为手机,这4个功能一定要打开,不然你的手机只会越用越卡!...
  4. 怎样用C语言数码管编写E1显示程序,跪求单片机0~99数码管显示用C语言编写的程序...
  5. CUBA Platform 7.0.4 发布,企业级应用开发平台
  6. 从 bug 中学习:六大开源项目告诉你 go 并发编程的那些坑
  7. 零基础mysql项目实例_MySQL-零基础开发
  8. 在python程序中嵌入浏览器_用Python中的wxPython实现最基本的浏览器功能
  9. 369Cloud控制台、IDE、组件、引擎升级全面解析
  10. JavaScript的对象观
  11. tools: USB、MiniUSB、MicroUSB接线
  12. android相机网格,Android – 在相机上显示网格线
  13. 一个时代的印记:还记得那些年我们逃课去的网吧
  14. VMware虚拟机和宿主机共享文件夹(windows,linux)
  15. ubuntu下发送邮件到外部邮箱
  16. Embedded metastore is not allowed. Make sure you have set a valid value for hive.metastore.uris
  17. .net 邮箱验证码 邮箱验证码实现用户注册
  18. 公元前一万年至2100年全球耕地分布数据的分享与探索
  19. CorelDRAW2019版本下载,CorelDRAW最新版新增功能(全)
  20. 鸡啄米vc++2010系列27(列表视图控件List Control 上)

热门文章

  1. OpenGL编程指南随书代码在VisualStudio2019的运行方法
  2. 计算机专业高程课,ArcGIS之数字高程(DEM)分析综合系列套餐
  3. java游戏毕业论文参考文献全面论文100个
  4. 深圳活用大数据提升气象服务
  5. maven 压缩html,YUI Compressor Maven插件压缩 js、css并输出war包
  6. 程序员常见面试逻辑智力题(笔试题)附参考答案
  7. 蓝湖怎么切图标注_蓝湖——网页设计在线高效自动标注及切图平台
  8. html网页设计插件,适用于网页设计的Photoshop插件包
  9. 极品五笔自定义字库(jpwb.emb)
  10. 数据库原理及应用教程(第4版|微课版)陈志泊-第一章习题