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的时候,程序员也可以自己判断所要包含的文件的保护宏是否已经被定义,来决定是否要包含这个文件。

编译器和解释器,预编译和预处理相关推荐

  1. 预编译及预处理的理解

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

  2. 预编译是什么意思,有什么作用?具体说明(珠海建荣笔试题)

    1.简单理解什么是编译?     编译就是编译源代码,将C源代码转化成.s的汇编代码.     编译器聚焦处理核心功能代码,预处理器处理剥离出来的非核心代码. 2.什么是预编译?预处理与预编译之间有什 ...

  3. python 预编译sql_python 预编译

    `__pycache__` 是什么 为了提高模块加载的速度,每个模块都会在 __pycache__ 文件夹中放置该模块的预编译模块,命名为 module.version.pyc, version 是模 ...

  4. 利用预编译技术防御SQL注入

    一.关于SQL注入 众所周知,SQL注入漏洞是一种常见的Web安全漏洞,其形成原因是服务器没有对用户输入的内容进行严格过滤,导致该内容拼接到服务器原本的SQL语句中,被当作SQL语句的一部分执行. 以 ...

  5. javascript代码块概念及预编译机制

    JavaScript是一种描述型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行.如果你不能理解javaScript语言的运行机制,或者简单地 ...

  6. C中出现:错误 C1010 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include stdafx.h”等头文件

    解决方式: 错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加"#include "stdafx.h""? ...

  7. c++ 问题:查找预编译头时遇到意外的文件结尾

    在添加其他文件的.h和.cpp到当前项目后运行,编译器提示:在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加"#include"stdafx.h""? ...

  8. vs编译错误:在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include stdafx.h”?

    vs2015编译出现以下错误: 在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加"#include "stdafx.h""? 一.错误分析: 此错误发生 ...

  9. Visual studio —— error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “StdAfx.h“”?

    错误图示: 原因分析: 此错误发生的原因是编译器在寻找预编译只是头文件(stdafx.h)时,文件未预期结束.没有找到预编译指示信息的头文件. 解决方法: 在解决方案资源管理器中,点击相应的.cpp文 ...

最新文章

  1. Linux内核系统时钟管理 感想总结 (未完待续)
  2. 【java实训课】web网页相关知识点总结
  3. 开源方案搭建可离线的精美矢量切片地图服务-3.Mapbox个性化地图定制入门
  4. Jquery Cookbook摘要之使用上下文参数
  5. 《JavaScript高级程序设计2》学习笔记——Ajax与JSON
  6. mysql数据库插入数据错误Error Code: 1118 - Row size too large ( 8126)
  7. 性能测试---性能指标【1】
  8. 新浪微博android代码,新浪微博Android源代码(基于OAuth1.0 仅供学习)
  9. 【springBoot】之快速构建一个web项目
  10. 2021 年百度之星·程序设计大赛 - 初赛一、二
  11. OpenCV:图像平移
  12. 子网掩码-掩码位-反掩码 对照表
  13. 团队项目(小小大佬带飞队)
  14. System.Globalization 命名空间
  15. ElasticSearch中什么是桶(bucket)?什么是度量(metrics)?
  16. Java计算文件的hash值
  17. 从metaWRAP quant_bins计算模块理解宏基因组分箱bin的丰度计算
  18. turnkey linux
  19. c++ error: use of deleted function 问题
  20. vue实现省市区三级联动地址选择

热门文章

  1. 推荐一个好的博客下载工具
  2. Transform 3.1:SPSS 的通用数据转换程序
  3. 为了证明苹果电脑会不会中毒,我把病毒拷了进去
  4. 百万基建狂魔们的赛博世界
  5. C++(标准库):26---STL迭代器之(迭代器的5大种类(输出迭代器、输入迭代器、向前迭代器、双向迭代器、随机访问迭代器))
  6. ecm工作原理 usb_ECM的工作原理.ppt
  7. 计算机基础_程序是怎样跑起来的_04_有棱有角的内存
  8. SQL Server Intergration Services(SSIS)
  9. ZPO006采购单收货报表
  10. ros中msg文件的bool类型并不会生成bool类型变量