看完这篇文章以后,终于明白了编译到底怎么回事。数据库

1

对于同一个语句,有以下三种:高级语言、低级语言、机器语言的表示编程

C语言:windows

a=b+1;网络

汇编语言:数据结构

mov -0xc(%ebp),%eax编辑器

add $0x1,%eax学习

mov %eax,-0x8(%ebp)spa

机器语言:操作系统

8b 45 f4翻译

83 c0 01

89 45 f8

咱们都知道,机器是只能作数字计算的,可以让机器去运算的、数字的语言就是机器语言,除此以外的全部计算机语言都是非机器语言。

这样的相对于机器语言的高级语言都须要一个转换,从高级、机器不可理解,转换为机器可理解的机器语言。

这样的一个转换过程就叫作编译(Compile),由编译器(Compiler)来完成。

由C转换为汇编语言这一过程是由汇编器(Assembler)来执行的。

C和汇编语言转换为机器语言都是由编译器来完成的。

2

这里面,C是可跨平台的,也能够说是与平台无关的。这里的平台有两种说法,一种是指计算机的体系(Architecture),另外一种是指操做系统(Operate System),也能够是指两种的结合。

不一样的平台,他们所须要的执行机器语言的指令集是不一样的。C的跨平台性是指,只须要编写一份不须要修改的C程序代码,就能够在不一样体系、不一样操做系统的计算机上运行。

这都要靠编译器的功劳,编译器将C程序翻译为了适合当前计算机体系的机器语言。

下面说一下将C语言编译为机器语言的整个过程:

首先,咱们写出一份C程序代码,命名该代码为hello.c,这个代码文件,咱们称之为源代码(Srouce Code)。

而后咱们运行编译器,对该源代码文件进行编译,在整个编译的过程当中,编译器并不会执行该源代码,只是生成一份新的机器语言代码文件,如hello.out。

这份新生成的代码文件称为目标代码(Object Code)或可执行代码(Executable)。

3

对于编译过程,里面还涉及到具体的一些能够说的细节步骤。在Linux下,使用gcc编译器:

❀ 预编译hello.c文件:

gcc -E -o hello.i hello.c

执行成功后就会生成一个新的hello.i的文件,能够用编辑器(Vim)查看它的内容,这个文件就是通过预编译后的内容。

预编译又称为预处理,是作些代码文本的替换工做。预编译能够处理#开头的指令,好比拷贝#include包含的文件代码,#define的宏定义的替换,条件编译等。

❀ 纯粹的进行编译:

gcc -S -o hello.s hello.i

把.i文件写为hello.c也行,就是跳过手动预编译,直接完成预编译和编译两个过程。

这时会获得一个hello.s文件,打开看一下,里面是编译好的使用于当前体系结构的汇编代码。

❀ 把汇编代码处理为目标文件:

gcc -c -o hello.o hello.s

把.s文件换成.c也行,就是自动完成预编译、编译和汇编三个过程。

如今获得一个hello.o文件,这是一个二进制文件,但不是最后的可执行二进制文件,由于它还缺乏最后一步链接处理。

最后对目标文件.o文件进行链接,咱们这里就一个.o文件因此简单,常常是须要有多个.o文件须要链接。

❀ 链接执行:

gcc -o hello hello.o

若是把最后的.o文件写成.c,那就和最开始咱们用hello.c编译时示范的那样了。实际上那样是完成了预编译、编译、汇编和链接一连串的过程。

-o选项给输出的文件从新命名而不使用gcc默认的文件名。

想了解更多gcc的姿式能够到GNU上去看看。

最后,无论你是转行也好,初学也罢,进阶也可,若是你想学编程~

涉及:C语言、C++、windows编程、网络编程、QT图形界面开发、Linux编程、游戏编程、数据结构与算以及数据库......

C语言怎么编译成机器语言的,终于理解了编译是怎么回事!从C语言到机器语言的升华过程!...相关推荐

  1. python源代码不需要编译成什么-python程序不需要编译吗

    python编译过程和执行原理 (1)python执行原理 这里的解释执行是相对于编译执行而言的.我们都知道,使用C/C++之类的编译性语言编写的程序,是需要从源文件转换成计算机使用的 机器语言,经过 ...

  2. 什么是pyc文件,把python的py文件编译成pyc文件,把pyc文件反编译成py文件。以及python编译的如何设置不生成pyc文件

    文章目录 1 什么是pyc文件 1.1 什么是pyc文件 1.2 pyc文件是怎么生成的,有什么好处 2 把python的py文件编译成pyc文件 2.1 使用python内置库py_compile把 ...

  3. linux c语言编译成exe,C/C++程序从编译到最终生成可执行文件的过程分析

    C/C++程序编译步骤 如何生成可执行文件 电子计算机所使用的是由"0"和"1"组成的二进制数,二进制是计算机的语言的 基础.计算机发明之初,人们只能降贵纡尊, ...

  4. python源代码不需要编译成什么-关于python代码是编译执行还是解释执行

    Python 是编译型语言还是解释型语言?回答这个问题前,应该先弄清楚什么是编译型语言,什么是解释型语言. 所谓编译执行就是源代码经过编译器编译处理,生成目标机器码,就是机器能直接运行的二进制代码,下 ...

  5. linux下ffmpeg编译成so文件,一、ffmpeg编译成android使用的so库

    1.在https://ffmpeg.org/中下载ffmpeg源码(目前版本为ffmpeg-3.2.1) 2.下载ndk 3.分别解压ffmpeg和ndk, 路径如 : ffmpeg路径: /home ...

  6. Android:看完这篇文章,我终于理解了漫游是怎么回事

    每篇一格言: 唯一永恒不变的就是改变. --本.伯南克(前美联储主席) 1.漫游的概念 要解释什么是漫游,就需要先了解下面几个概念: MCC:Mobile Country Code 国家码 . MNC ...

  7. python代码编译成pyd_python如何编译py文件生成pyc、pyo、pyd以及如何和C语言结合使用...

    python执行py文件的流程 当我们执行一个py文件的时候,直接python xx.py即可,那么这个流程是怎么样的呢.先说明一下,python执行代码实际上是先打开文件然后执行里面的代码,所以文件 ...

  8. 【CLR via C#】CSC将源代码编译成托管模块

    下图展示了编译源代码文件的过程.如图所示,可用支持 CLR 的任何一种语言创建源代码文件.然后,用一个对应的编译器检查语法和分析源代码.无论选用哪一个编译器,结果都是一个托管模块(managedmod ...

  9. php编译成二进制文件_2020年小米高级 PHP 工程师面试题

    1.通过哪一个函数,可以把错误转换为异常处理? A:set_error_handler B:error_reporting C:error2exception D:catch 正确答案:A 答案分析: ...

最新文章

  1. php 给图片增加背景平铺水印代码
  2. MyBatis小问题(1)-Mapper中错误No constructor found...
  3. Node,Document,HTMLDocument,HTMLCollection解析
  4. No space left on device 解决 Cydia 安装应用错误
  5. 前端学习(1466):表格案例其他效果演示
  6. Package ‘*****‘ has no installation candidate
  7. fastjson的作者,在阿里内网挨骂了?!
  8. 控制台双缓冲防闪烁--功能封装
  9. button捕捉回车键
  10. 硬盘MBR和GPT区别
  11. 云终端linux,云终端详细介绍,看完你就都懂了
  12. 功能接口 java8_Java 8功能接口
  13. 用python画熊猫_熊猫read_excel()–用Python读取Excel文件
  14. 在VS中安装nuget离线包nupkg文件
  15. 传感器实验——光敏电阻传感器
  16. 多x多y的origin图_素雅、便携、多场景,松下纳诺怡X黑科技除菌净味产品使用简评...
  17. 软件测试面试题整理(二)之测试用例集
  18. iOS SDK开发二三事
  19. php.c drcom,Drcom (简体中文)
  20. abp过滤规则android,ABP的数据过滤器(Data Filters)

热门文章

  1. Consul命令选项
  2. gff文件用什么打开_GTF/GFF文件的差异及其相互转换
  3. vue-router详解
  4. excle中根据两列内容匹配第三列数据
  5. ▲▲1.9 [hduoj] 2066 一个人的旅行
  6. 拿下监控,我全靠这个超牛逼的告警管理平台
  7. Netapp存储选购的经历
  8. 「津津乐道播客」#392 原汤话原食:仲夏夜,马砂、肉串儿、趿拉板儿
  9. 未能加载文件或程序集“Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=7
  10. 最令人生厌的两家中国IT公司