以下文章来源于:公_众_号开源电子网
读取更多技术文章,请扫码关注

C语言入门了解篇—C语言编译流程

(面试常见问题)

前言

当我们安装了集成环境之后,编写.c文件,一按下图红色框框的按键即“编译并运行”,就可以得到一个“.exe”后缀的可执行的C程序文件,这期间并非只有一道工序,而是分别经过了预处理、编译、汇编和链接四个流程。

下图就是C程序的编译流程。

以上过程就是可以囊括为:高级语言汇编语言机器语言(二进制)

1、 预处理

由.c文件到.i文件,这个过程叫预处理。在源文件被编译前,首先要进行预处理的工作,也就是对源代码进行相对应的展开、替换和清理。
在这个过程中,主要处理的事情:
① 把代码注释部分去掉,不让其参与编译
② 将所有的#define删除,并且展开所有的宏定义,简单来说就是字符替换
③ 处理所有的条件编译指令,例如#ifdef、#ifndef、#endif,简单来说就是带#的那些
④ 把“stdio.h”文件包含进来,即用“stdio.h”中的内容替换在“#include<stdio.h>”位置

2、 编译

由.i文件到.s文件,这个过程叫编译。编译的过程实质上是把高级语言翻译成机器语言的过程。简单来说,源文件被预处理之后,再以字符流的形式进行处理,进行词法和语法的分析,然后通过汇编器将源代码指令转变成汇编指令、生成相应的汇编文件。

3、 汇编

由.s文件到.o文件,这个过程叫汇编。汇编是指把汇编语言代码翻译成目标机器指令的过程,也就是把汇编码转换成机器所能识别的二进制,通过把经过汇编之后生成的文件称为目标文件。

4、 链接

由.o文件到可执行文件,这个过程叫链接。经过汇编之后生成的目标文件并不能立即被执行,还需要由链接器将代码在执行过程中用到的其他目标代码及库文件进行链接,最终生成一个可执行程序。
假如.c文件中有用到printf函数,那么就需要找到包含该函数的标准库文件,对它进行链接。

想不到IDE帮我们处理了这么多事情吧,作为工科男,我们也有必要了解这个编译流程,并且这个是面试常见的问题。后面开始正式进入C语言篇章学习。

C语言入门了解篇—C语言编译流程相关推荐

  1. C语言入门(初识C语言)

    C语言入门(初识C语言) 前言 什么是C语言? 为什么选择C语言? 计算机语言的发展 高级计算机语言中的经典:C语言 初识C语言(正片开始) 一.第一个C语言程序(你好,C语言) 1.1 #inclu ...

  2. 怎么理解python语言_Python语言入门1-理解Python语言

    本文主要向大家介绍了Python语言入门的理解Python语言,通过具体的内容向大家展现,希望对大家学习Python语言入门有所帮助. python是解释型的脚本语言 解释型语言 与C/C++等编译型 ...

  3. c语言tab什么意思_C语言入门 — 一篇最全的C语言基础知识。

    c语言入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是其它众多高级 ...

  4. vhdl语言入门_初学Chisel语言,看这篇就够了:最方便简洁的入门资料整理

    声明:本文是我一个很优秀的学生总结的,放出来供广大chisel语言爱好者参考. Chisel(Constructing Hardware In a Scala Embedded Language)是U ...

  5. 计算机c语言入门.ppt,计算机c语言入门经典

    计算机c语言入门经典 C语言对编写需要进行硬件操作的场合,优于其它高级语言.小编为大家分享一些计算机c语言入门经典,欢迎参考! 一.开始之前 FAQ 那是什么 为何有这篇FAQ 编程为何物 如果这就是 ...

  6. c语言入门经典doc,C语言入门经典C语言编程.ppt

    C语言入门经典C语言编程.ppt 第01章 C语言编程,C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序即一组指令,并让计算机依指令行事 ...

  7. C语言入门教程学习 C语言学习包括哪些?

    嵌入式开发有一定了解的朋友们知道是在操作系统内部开发的,对于操作系统内部来说基本上都是用C语言来进行编译的,所以说对于C语言的学习在嵌入式开发过程中是非常重要的.下面就给大家介绍一些C语言入门教程的相 ...

  8. c语言入门教程文库,C语言入门教程(全集)课件

    C语言入门教程(全集)课件 01123364105 Y N p AB X=0? YN P1 A A P2 a a b b Y Y N N y n A B P A A B X=0? 3 a97 3 U ...

  9. c语言入门经典案例,c语言入门经典案例及飞源代码.doc

    c语言入门经典案例及飞源代码 循环控制输出图案 [程序1]题目:输出9*9口诀.1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列.2.程序源代码:#include "stdio.h ...

  10. R语言入门第一集 R语言、RTools、RStudio的简介、安装与使用

    R语言入门第一集!R语言.RTools.RStudio的简介.安装与使用! 一.简介:什么是R语言.RTools.RStudio? R语言 RStudio R 语言的集成开发环境 rtools是什么工 ...

最新文章

  1. Makefile 选项 CFLAGS 、LDFLAGS 、LIBS
  2. 计算机考研只有数据结构,【择校必看】十三所计算机专业课只考数据结构的985院校!...
  3. telnet实现本地回显
  4. 【UI/UX】深度解析模态窗口
  5. 直播 | 循序渐进 - DM8 数据存储管理
  6. 第二代计算机网络主要贡献,2010级计算机网络试题
  7. 将php分页类YII绑定框架,就需要改变风格的基础
  8. 修改 Ubuntu SSH 登录后的欢迎信息
  9. Vue双向绑定的实现原理系列(三):监听器Observer和订阅者Watcher
  10. puppet学习—默认WEBRick安装DashBoard
  11. 销售订单批量导入(1)
  12. linux命令备忘录
  13. DHCP保留地址与超级作用域centos7
  14. 宏定义是什么?为什么要进行宏定义?宏定义的格式
  15. tensorflow 如何计算向量余弦相似 cosine similarity
  16. 网络分层(7层)以及每层的设备和协议
  17. assertThat断言测试方法
  18. Spring--配置
  19. 变量值互换自定义函数swap()的使用
  20. 百度地图获取省市边界、设置图片背景

热门文章

  1. html可以用坐标画svg图吗,html5教程-SVG基础 SVG坐标系统和图形转换
  2. session的概念特点及原理
  3. StanfordDB class自学笔记 (16) 心得体会
  4. python爬虫笔记_python简单爬虫笔记
  5. 第九次团队作业-测试报告与用户使用手册
  6. python getopt的用法
  7. 【ARM-Linux开发】Ubuntu下的/usr目录权限,导致不能使用sudo命令的修复
  8. PhpStorm Live Template加PHP短语法Short Open Tags打造原生模板
  9. 登陆界面输入框内加入小图标的样式
  10. 【iCore3 双核心板】例程八:定时器PWM实验——呼吸灯