1、流程图

  • 从用C语言写源代码,然后经过编译器、连接器到最终可执行程序的流程图大致如下图所示。

2、编译流程

  • 首先,我们先用C语言把源代码写好,然后交给C语言编译器。C语言编译器内部分为前端和后端。
  • 2.1 编译器前端

    • 前端负责将C语言代码进行词法和语法上的解析,然后可以生成中间代码。
    • 中间代码这部分不是必须的,但是它能够为程序的跨平台移植带来诸多好处。比如,同样的一份C语言源代码在一台计算机上编译完之后,生成一套中间代码。然后针对不同的目标平台(比如要将这一套代码分别编译成 ARM 处理器的二进制机器码、MIPS 处理器的二进制机器码以及 x86 处理器的二进制机器码),只需要编写相应目标平台的编译器后端即可。
    • 所以,这么做就可以把编译器的前端与后端剥离开来(这在软件工程上又可称为解耦合),不同处理器厂商可以针对自家的处理器特性,对中间代码生成到目标二进制代码的过程再度进行优化。
  • 2.2 编译器后端

    • 接下来,由C语言编译器后端生成源文件相应的目标文件。
    • 目标文件在 Windows 系统上往往是.obj文件,而在 Unix/Linux 系统上往往是.o文件,C语言的源文件在所有平台上都统一用.c文件表示。
  • 2.3 链接器

    • 最后,对于各个独立的目标文件,通过连接器将它们合并成一个最终可执行文件。
    • 连接器与C语言编译器是完全独立的。所以,只要最终目标代码的 ABI(应用程序二进制接口)一致,我们可以把各个编译器生成的目标代码都放在一起,最后连接生成一个可执行文件。比如:
      • 有些源代码可用 GCC 编译;
      • 有些使用 Clang 编译;
      • 还有些汇编语言源文件可直接通过汇编器生成目标代码。

最新文章

  1. Android-找到包下面所有的类
  2. 三、最小化的Spring XML配置
  3. (BFS)aoj0558-Cheese
  4. 于网站主机,DNS,域名解析,Web服务器关系详解
  5. Ubuntu 设置Vim tab为四个空格
  6. win8.1开启虚拟wifi
  7. Linux下eclipse的安装以及配置
  8. Java邮件开发(JavaMail)
  9. poj 1780 code(欧拉路)
  10. XMPP基础
  11. HTML 5最终确定,八年后,我们再谈谈如何改变世界
  12. JAVA动态代理详解
  13. IOS 7 Xcode 5 免IDP证书 真机调试(转载)
  14. How Do I Declare A Block in Objective-C? [备忘]
  15. 转://诊断 Grid Infrastructure 启动问题 (文档 ID 1623340.1) .
  16. Python MD5算法使用
  17. Albert Einstein
  18. LostRoutes项目日志——编辑project.json
  19. qs.parse()、qs.stringify()使用方法
  20. vue中组件通信之子父通信

热门文章

  1. Java 对象和实例的区别
  2. vue-cli脚手架build目录下utils.js工具配置文件详解
  3. 8.solr学习速成之FacetPivot
  4. 3.Periodic Tasks
  5. Python中的 set 与 深浅拷贝
  6. 前端学习笔记一:什么是W3C?
  7. leetcode606
  8. Java微信公众平台开发(十三)--微信JSSDK中Config配置
  9. Uboot详细解析2
  10. Express+MySQL