编译器和解释器,预编译和预处理

转载 2016年06月01日 18:54:13

1、编译器和解释器

解释器和编译器,读入源语言后,解释器和编译器都要进行词法分析、语法分析和语义分析,之后,二者开始有所分别。解释器在语义分析后选择了直接执行语句;编译器在语义分析后选择将将语义存储成某一种中间语言,之后通过不同的后端翻译成不同的机器语言(可执行程序)。

比如:解释器的行为类似于过节去商场买东西,路过各个柜台,见到需要的就买;而编译器是,自己写好个清单,再去执行。

http://www.cnblogs.com/sword03/archive/2010/06/27/1766147.html

点击在新窗口中浏览此图片

点击在新窗口中浏览此图片

http://blog.csdn.net/touzani/article/details/1625760

2、预编译和预处理

编译器是以文件为单位编译的,一个文件经过修改后,会重新编译整个文件,当然在这个文件里包含的所有头文件中的东西(.eg Macro, Preprocesser )都要重新处理一遍。VC的预编译头文件保存的正是这部分信息。以避免每次都要重新处理这些头文件。

点击在新窗口中浏览此图片      避免重复编译。


预处理:可以理解为对预编译的内容进行挑选。

在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。


对于#pragma once,根据MSDN解说,能够防止一个文件被多次包含。与#ifndef #define #endif形式的文件保护相比,前者是平台相关的,可移植性比较差,但是它效率更高,因为它不需要去打开包含的文件,就可以判断这个文件有没有被包含。当然这个工作是系统帮我们完成的。

后者的优点在于它是语言相关的特性,所以可移植性好。但是在包含一个文件的时候,只有打开这个文件,根据文件的保护宏是否已经被定义来判断此文件是否已经被包含过。效率相对较低。当然在#i nclude的时候,程序员也可以自己判断所要包含的文件的保护宏是否已经被定义,来决定是否要包含这个文件。



预处理器,编译器,汇编器和链接器

转载地址:http://www.cnblogs.com/maomaohhmm/archive/2012/10/28/2743903.html (1).预处理(cpp):预处理器不止一种,而C/C++...
  • mingzhentanwo
  • mingzhentanwo
  • 2015年04月11日 11:26
  • 762

JavaScript预编译原理分析

今天用了大量时间复习了作用域,预编译等等知识 看了很多博文,翻开了以前看过的书 发现当初觉得自己学的很明白,其实还是存在一些思维误区 今晚就整理了一下凌乱的思路 先整理一下预编译的知识吧,日后...
  • q1056843325
  • q1056843325
  • 2016年10月27日 23:06
  • 5748

FormEditor编辑器变脏处理

 对于多页的FormEditor编辑器 ,MULTIPAGEEDITRO中包含FRMPAGE,FROMPAGE中包含的有PAGEFORM.首先,在判断编辑器是否为脏。FormEditor的isDirt...
  • hisky1983
  • hisky1983
  • 2007年11月19日 19:05
  • 1063

预编译及预处理的理解

一、预编译头文件说明   所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头...
  • business122
  • business122
  • 2014年04月10日 16:04
  • 3578

预处理,编译,汇编,链接程序的区别

预处理,编译,汇编,链接程序的区别@(OS)一段高级语言代码经过四个阶段的处理形成可执行的目标二进制代码。预处理器→编译器→汇编器→链接器 预处理器\rightarrow 编译器 \rightarro...
  • u011240016
  • u011240016
  • 2016年11月22日 14:29
  • 1816

gcc编译程序的四个阶段(预处理-编译-汇编-链接)

gcc的编译流程分为四个步骤,分别为: ・ 预处理(Pre-Processing) ・ 编译(Compiling) ・ 汇编(Assembling) ・ 链接(Linking) 下面就具体来查看一下g...
  • qq_31108501
  • qq_31108501
  • 2016年07月06日 20:08
  • 2120

编译原理实验之源程序的预处理及词法分析程序设计

题目要求:     1、实现预处理功能 源程序中可能包含有对程序执行无意义的符号,要求将其剔除。 首先编制一个源程序的输入过程,从键盘、文件或文本框输入若干行语句,依次存入输入缓冲区(字符型数据);...
  • u010668907
  • u010668907
  • 2014年09月08日 23:41
  • 2480

解释器vs编译器 && C,java,python编译过程对比

编译器/解释器区别 JVM/PVM/Shell/C 编译运行过程对比
  • siyu1993
  • siyu1993
  • 2017年06月03日 17:55
  • 133

Lua源码Lua编译库及解释器、编译器编译

1.下载Lua源码:http://www.lua.org/download.html 2.Lua库编译 2.1   Lua库的静态编译 1.用VS2013创建Win32控制台项目,选择静态库,生...
  • u011423234
  • u011423234
  • 2017年08月05日 14:19
  • 111

PL0解释器与编译器的分离及其功能扩展

  • 2011年09月21日 21:51
  • 1.86MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编译器和解释器,预编译和预处理
举报原因:
原因补充:

(最多只允许输入30个字)