计算机科学里的宏是一种抽象,它根据一系列预定义的规则替换一定的文本模式。
基本介绍
- 中文名宏
- 外文名Macro
- 所属计算机科学
- 属性一种抽象
- 依据一系列预定义的规则
宏
什幺是宏
Excel 办公软体自动集成了“VBA”高级程式语言,用此语言编制出的程式就叫“宏”。使用“VBA”需要有一定的编程基础和耗费大量的时间,,绝大多数的使用者仅使用了Excel的一般制表功能,很少使用到“VBA”。
解释器或编译器在遇到宏时会自动进行这一模式替换。对于编译语言,宏展开在编译时发生,进行宏展开的工具常被称为宏展开器。宏这一术语也常常被用于许多类似的环境中,它们是源自宏展开的概念,这包括键盘宏和宏语言。绝大多数情况下,使用“宏”这个词的使用暗示着将小命令或动作转化为一系列指令。
宏的用途在于自动化频繁使用的序列或者是获得一种更强大的抽象能力--但这常常是一回事。
计算机语言如C或彙编语言有简单的宏系统,由编译器或彙编器的预处理器实现。C的宏预处理器的工作只是简单的文本搜寻和替换,使用附加的文本处理语言如M4,C程式设计师可以获得更精巧的宏。
Lisp类语言如Common Lisp和Scheme有更精巧的宏系统: 宏的行为如同是函式对自身程式文本的变形,并且可以套用全部语言来表达这种变形。一个C宏可以定义一段语法的替换,一个Lisp的宏却可以控制一节代码的计算。
获得了控制代码的执行顺序(见惰性计算和非限制函式)的能力,使得新创建的语法结构与语言内建的语法结构不可区分。例如,一种Lisp 方言有 cond 而没有if ,就可以使用宏由前者定义后者。Lisp 语法的去部主要扩展,比如面向对象的CLOS 系统,可以由宏来定义。
典型套用
加速日常编辑和格式设定
组合多个命令
使对话框中的选项更易于访问
使一系列複杂的任务自动执行
避免函式馆的嵌套调用,例如主程式中include了A库和B库,B库中include了A库,多次调用同一个库会造成资源浪费。此时A库中可以#define一个宏,并且在每次编译A库时都用#ifndef或#ifdef语句检测这个宏是否已经被定义,从而避免重複引用同一个库。
编程介绍
在用一种不熟悉的宏语言进行宏编程时,可以这样做,记录下用户想要宏完成什幺,然后打开宏档案并尝试理解命令结构如何工作。也可以修改命令以调整宏。一些宏语言,比如Great Plains账务(?accounting)软体的 Dexterity 运行时引擎,不能从其它数据源(如由逗号分隔的文本档案)导入数据。这一限制可以通过用更强大的程式语言,如 VBA 来创建一个电脑程式在此弱程式语言里生成一个特别的宏来解决。例如,可以对 Microsoft Excel 宏编程从扩展样式表或文本档案中读取数据并创建 Great Plains .mac 档案,这一档案被用于将特定的数据导入 Great Plains. 需要针对每一个新的数据集合声称新的 .mac 档案。
键盘宏
键盘宏和编辑器宏分别在图形用户界面和编辑器中被互动式地使用。使用它们可以用简短的击键代替冗长的命令序列,并为重複性任务提供了一个简单的自动化形式。
程式设计师的文本编辑器 Emacs (“编辑宏”[Editing MACroS]的简称)是沿用这一思想的产物。事实上,大多数编辑器是由宏组成的,Emacs 最初被设计为编辑语言 TECO 的宏集,后被移植为 Lisp 的一中方言 Emacs Lisp。
宏语言
宏语言是一类程式语言,其全部或多数计算是由扩展宏完成的。宏语言并未在通用编程中广泛使用,但在文本处理程式中套用普遍。例如,
C preprocessor C 预处理器
Internet Macros(iOpus)
M4(如前所述,源于AT&T,捆绑于Unix)
宏定义
c程式提供的预处理功能之一。包括带参数的宏定义和不带参数的宏定义。具体是指用一个指定的标誌符来进行简单的字元串替换或者进行阐述替换。形式为
#define标誌符(参数表) 字元串
另一种宏定义的方法为
#define 字元串
例如c++库 yvals_core.h 中
#define _NODISCARD
这一类的宏在编译宏展开时会将这些字元串替换成“”,也就是空字元,替换后没有实际作用。
宏名
在上定义中的标誌符被称为“宏名”。
宏展开
在c程式编译时将宏名替换成字元串的过程称为“宏展开”。
VBA
Visual Basic for Applications (VBA),是 Microsoft Office 里的一种程式语言. 但由上面的定义,它完全不是一种宏语言。,它的功能已经从中发展并最终替代了用户应用程式的宏思想,所以他被广泛地错误地称为是一种宏语言。
VBA 可以访问许多作业系统函式并支持文档打开时自动执行宏。这使得用这种语言写计算机病毒成为可能。1990年代中后期,宏病毒成为了最流行的计算机病毒类型之一。其它的包括宏语言的项目,如openoffice org,故意从其宏语言中排除了一些功能(如自动执行)以避免破坏程式。,这一特性在很多事务中受到欢迎。
另在数位相机镜头中Marco的意思是微距。