编译器和解释器的区别和联系
来源:互联网 发布:android 打开淘宝店铺 编辑:程序博客网 时间:2024/06/04 08:35
编译器和解释器的区别和联系
最近在看《编译原理》(龙书)和《C++ primer》,写点读书总结
学过C/C++语言的同学都知道,写完的程序都要经过编译的过程,这其中就涉及到对编译器的理解,也许对于非计算机专业的人来说,没必要把其中的详细编译步骤了解清楚,但知其所以然似乎更好。
Windows下比较主流的编译过程一般集成在集成开发环境VS中,在Linux下一般使用GNU(当然比较牛的人似乎都是用那种命令行的形式编译的,可惜我不是)。在VS中程序的执行过程包括:预处理(preprocessor)—编译(compiler)—汇编(assembler)—链接(linker)—加载(loader)。
预处理的作用将分散在多个文件中的代码合并起来,#include语句就有此作用,在预处理中有可能用到宏(macros)。#include加入的头文件不能包含有定义语句,由于C++中变量和函数只能定义一次,而头文件是被加入到其他原文件中的,所以其中不能含有定义语句,否则会有重定义(redefinition)的错误,当然也有例外,类,const对象,inline函数可以定义在头文件中。
编译的过程就是将源程序翻译成目标程序:源程序—编译器—目标程序,编译器还有报告源程序错误的作用。在生成了目标程序后,由我们的输入就可以生成相应的输出:输入—目标程序—输出,这也是诸多函数的调用形式。
汇编就是将编译步骤生成的代码(在C/C++中.o格式文件),其一般是汇编语言代码,转化为计算机能够处理的机器代码,这个过程和上一步骤似乎很类似。
链接是将分散在不同源文件中的代码组合起来,生成一个可以处理的大文件,例如,在VS中的多个源文件,通过单独编译后,可以链接成一个文件,然后通过加载器将其加载到计算机内存中,得到可执行文件(C/C++中的.exe文件)
解释器是另外种形式的语言处理器,它相当于不生成上面的目标程序,直接将输入“放到”源程序中,然后经过解释器,就得到了输出。通常情况下,编译过程比解释过程更快,但解释器能够有更好的错误诊断,因为解释器是逐句进行解释的。学习过Python语言的同学都知道,Python是一种解释性语言,它的运行过程就用到了解释器。
编译器和解释器可以结合起来进行处理,Java语言处理器就是其中的代表,其过程是源程序经过翻译器处理后得到中间程序,也被称作字节码(bytecode),然后和输入共同加入到虚拟机(virtual machine)的前端,得到输出,其前一部分用到编译器,后一部分用到解释器,这样做的好处是一个机器解释的代码可以应用在另外的机器上,甚至可以延伸到网络上。
- 解释器和编译器区别和联系
- 解释器和编译器区别和联系
- 编译器和解释器的区别和联系
- 解释器和编译器的区别与联系
- 编译器和解释器的区别与联系
- 解释器和编译器的区别与联系
- 儿子和女儿——解释器和编译器的区别与联系
- 儿子和女儿——解释器和编译器的区别与联系
- 儿子和女儿——解释器和编译器的区别与联系
- 儿子和女儿——解释器和编译器的区别与联系
- 儿子和女儿——解释器和编译器的区别与联系
- 儿子和女儿——解释器和编译器的区别与联系
- 儿子和女儿——解释器和编译器的区别与联系
- 儿子和女儿——解释器和编译器的区别与联系
- 儿子和女儿——解释器和编译器的区别与联系
- 编译器和解释器的区别
- 解释器和编译器的区别
- 解释器和编译器的区别
- hdoj 1584(没有使用队列的dfs)
- 禁用在Xcode中的特定文件的ARC
- samba3.5.10的smb和nmb是分开启动的
- 古琴
- HALCON算子函數——Chapter 6 : Graphics
- 编译器和解释器的区别和联系
- 查询oracle10G启动时的时间和运行的时间
- 建设局项目总结(二)——最囧的一个星期
- HALCON算子函數——Chapter 5 : Filter
- HALCON算子函數——Chapter 4 : File
- HALCON算子函數——Chapter 3 : Develop
- 如何在Linux/Unix/windows平台查看HBA卡的WWN号
- servlet3.0新特性
- 写在2012开始