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

转载 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++...

gcc——预处理(预编译),编译,汇编,链接

一,预编译 操作步骤:gcc -E hello.c -o hello.i 主要作用: 处理关于 “#” 的指令 【1】删除#define,展开所有宏定义。例#define portnumber...

预编译及预处理的理解

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

c进行预处理、编译、连接、运行是做什么

1.预处理阶段: 编译器以C文件作为一个单元,首先读这个C文件,发现第一句与第二句是包含一个头文件,就会在所有搜索路径中寻找这两个文件,找到之后,就会将相应头文件中再去处理宏,变量,函数声明,嵌套的...

简单词法分析器的实现原理(编译原理)

开篇 编译,简单的说,就是把源程序转换为可执行程序。从hello world 说程序运行机制 里面简单的说明了程序运行的过程,以及一个程序是如何一步步变成可执行文件的。在这个过程中,编译器做了很多重...

编译器编译原理详细解析

编译器编译原理详细解析 分类: c++专区 VS编译器有关 2014-08-01 14:16 219人阅读 评论(0) 收藏 举报 第一篇摘自:http://www....

编译器、操作系统、CPU相关的预处理宏定义

跨平台代码开发。

C/C++编译预处理指令

众所周知,你的程序编译前要做的事就是扫描源代码,对其做初步的转换,产生新的源代码提供给编译器,这个过程就叫编译预处理。这个处理过程由预处理器来完成,预处理器是在程序真正运行前由编译器调用的预处理程序。...

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

编译器/解释器区别 JVM/PVM/Shell/C 编译运行过程对比
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编译器和解释器,预编译和预处理
举报原因:
原因补充:

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