c语言中的“宏”是指什么

c语言中的“宏”是指什么,第1张

是一种批量处理的称谓。计算机科学里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。

“宏”这个词的使用暗示着将小命令或动作转化为一系列指令。

计算机语言如C语言或 汇编语言有简单的宏系统,由编译器或汇编器的预处理器实现。C语言的宏预处理器的工作只是简单的文本搜索和替换,使用附加的文本处理语言如M4,C程序员可以获得更精巧的宏。

在Objective-C语言源程序中,允许用一个标识符来表示一个字符串,称为宏,被定义为宏的标识符称为宏名。在编译预处理时,对程序中所有出现的宏名,都用宏定义中的字符串去替换,这称为宏替换或宏展开。

宏定义是由源程序中的宏定义命令完成的,宏替换是由预处理程序自动完成的。在Objective-C语言中,宏分为有参数和无参数两种。

扩展资料

A类宏是用G65 Hxx P#xx Q#xx R#xx或G65

Hxx P#xx Qxx

Rxx格式输入的,xx的意思就是数值,是以um级的量输入的,比如你输入100那就是01MM #xx就是变量号,变量号就是把数值代入到一个固定的地址中,固定的地址就是变量。

一般OTD系有#0~#100~#149~#500~#531关闭电源时变量#100~#149被初始化成“空”,而变量#500~#531保持数据。我们如果说#100=30那么现在#100地址内的数据就是30了。

B类宏能完成某一功能的一系列指令像子程序那样存入存储器,用户可以设定M、S、T、G代码调用它们,使用时只需给出这个指令代码就能执行其功能,也可以像调用子程序一样使用。

参考资料来源:百度百科——宏程序

参考资料来源:百度百科——宏定义

参考资料来源:百度百科——宏命令

C语言中的宏定义用法分为两种。

1、不带参数的宏定义比较简单,就是用一个指定的标识符来代表一个字符串。它的一般形式为“#define 标识符 字符串”,例如#define E 2718281828459。这种方法使用户能以一个简单的名字代替一个长的字符串。

2、带参数的宏定义不是仅仅进行简单的字符串替换,还要进行参数替换。其定义的一般形式为;“#define 标识符(宏名)(参数表) 字符串”,字符串中包含在括号中所指定的参数。例如#define S(a,b) ab area=S(3 2)。

扩展资料:

宏定义只占编译时间,函数调用则占用运行时间(分配单元,保存现场,值传递,返回),每次执行都要载入,所以执行相对宏定义会较慢。

使用宏定义次数多时,宏定义展开后源程序很长,因为每展开一次都使程序增长,但是执行起来比较快一点(这也不是绝对的,当有很多宏定义展开,目标文件很大,执行的时候运行时系统换页频繁,效率就会低下)。而函数调用不使源程序变长。

在介绍C语言的宏定义之前,需要介绍一下预处理。

什么是预处理呢?所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所做的工作。预处理是C语言的一个重要的功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕后自动进入对源程序的编译。

程序中以“#”开头的预处理命令,如包含命令#include,宏定义命令#define等。在源程序中这些命令都放在函数之外,一般放在源文件的前面,称为预处理部分。宏定义就是预处理的一种。

C语言中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。在预编译处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。

C语言的“宏”分为有参数和无参数两种,下面对这两种“宏”分别进行讨论。

1、无参宏定义

无参宏的宏名后不带参数。

其定义的一般形式为:#define 标识符 字符串

“标识符”为所定义的宏名,“字符串”可以是常数、表达式、格式串等。

例如:

#define M (xx+2x+1)

它的作用是指定标识符M来代替表达式(xx+2x+1)。在编写源程序时,所有的(xx+2x+1)都可以由M代替。而对源程序作编译时,将先由预处理程序进行宏代换,即用(xx+2x+1)表达式去置换所有的宏名M,然后再进行编译。

例如:

#include <stdioh>

#define M (xx+2x+1)

main()

{

int sum,x;

printf("input a number: ");

scanf("%d",&x);

sum=3M+4M+5M;

printf("sum=%d\n",sum);

}

上例程序先用宏定义M来替代表达式(xx+2x+1),在sum=3M+4M+5M中作了宏调用。在预处理时经宏展开后该语句变为sum=3(xx+2x+1)+4(xx+2x+1)+5M(xx+2x+1)。

对于宏定义需要注意一下几点:

1)宏定义是用宏名来表示一个字符串,在宏展开时,又以该字符串取代宏名,这只是一种简单的代换,字符串中可以包含任何字符,可以是常数,也可以是表达式,预处理程序不对它作任何检查。如有错误,只能在编译已被宏展开后的的源程序时发现。

2)宏定义不是说明或语句,在行末不需加分号,若加了分号则连分号一起置换。

3)宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令。

例如:

#define PI 31415926

main()

{

}

#undef PI

f1()

{

}

表示PI只在main函数中有效,在f1中无效。

4)宏名若在程序中用引号括起来,则预处理程序不对其作宏代换。

5)宏定义允许嵌套,在宏定义的字符串中可以使用已定义的宏名。在宏展开时,由预处理程序层层代换。

6)习惯上宏名用大写字母表示,以区分变量。当然也可以用小写字母表示。

7)可以用宏定义表示数据类型,使书写方便。

例如:

#define U8 unsigned int

注意宏定义表示数据类型和用typedef定义数据说明符的区别:宏定义只是简单的字符串代换,是在预处理完成的;而typedef是在编译时处理的,它不是做简单的代换,而是对类型说明符重新命名,被命名的标识符具有类型定义说明的功能。

2、带参宏定义

在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。

对带参的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。

带参宏定义的一般形式为:

#define 宏名(形参表) 字符串

在字符串中含有各个形参。

带参宏调用的一般形式为:

宏名(实参表);

例如:

#define M(y) yy+3y /宏定义/

k=M(5) /宏调用/

在宏调用时,用实参5去替代形参y,经预处理宏展开后的语句为:

k=55+35

例如:用带参宏来获取较大数

#define MAX(a,b) (a>b)a:b

对于带参宏需要注意以下几点:

1)带参宏定义中,宏名和形参表之间不能有空格出现。

2)在带参宏定义中,形式参数不分配内存单元,因此不必作类型定义。而宏调用中的实参由具体的值,要用它们去代换形参,因此必须作类型声明。这只是符号代换,不存在值传递的问题。

3)在宏定义中形参是标识符,而宏调用中的实参可以是表达式。

4)在宏定义中,字符串内的形参通常要用括号括起来以免出错。

摘自百度知道

什么是宏

计算机科学里的宏是一种抽象的,根据一系列预定义的规则替换一定的文本模式。Excel 办公软件自动集成了“VBA”高级程序语言,用此语言编制出的程序就叫“宏”。使用“VBA”需要有一定的编程基础和耗费大量的时间,因此,绝大多数的使用者仅使用了Excel的一般制表功能,很少使用到“VBA”。 解释器或编译器在遇到宏时会自动进行这一模式替换。对于编译语言,宏展开在编译时发生,进行宏展开的工具常被称为宏展开器。宏这一术语也常常被用于许多类似的环境中,它们是源自宏展开的概念,这包括键盘宏和宏语言。绝大多数情况下,使用“宏”这个词的使用暗示着将小命令或动作转化为一系列指令。 宏的用途在于自动化频繁使用的序列或者是获得一种更强大的抽象能力--但这常常是一回事。 计算机语言如C或汇编语言有简单的宏系统,由编译器或汇编器的预处理器实现。C的宏预处理器的工作只是简单的文本搜索和替换,使用附加的文本处理语言如M4,C 程序员可以获得更精巧的宏。 Lisp类语言如Common Lisp和Scheme有更精巧的宏系统: 宏的行为如同是函数对自身程序文本的变形,并且可以应用全部语言来表达这种变形。一个C宏可以定义一段语法的替换,然而一个Lisp的宏却可以控制一节代码的计算。 获得了控制代码的执行顺序(见惰性计算和非限制函数)的能力,使得新创建的语法结构与语言内建的语法结构不可区分。例如,一种Lisp 方言有 cond 而没有if ,就可以使用宏由前者定义后者。Lisp 语法的去部主要扩展,比如面向对象的CLOS 系统,可以由宏来定义。

宏的典型应用

加速日常编辑和格式设置 组合多个命令 使对话框中的选项更易于访问 使一系列复杂的任务自动执行

宏编程介绍

在用一种不熟悉的宏语言进行宏编程时,可以这样做,首先记录下用户想要宏完成什么,然后打开宏文件并尝试理解命令结构如何工作。也可以修改命令以调整宏。一些宏语言,比如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标志符(参数表) 字符串 宏名 在上定义中的标志符被称为“宏名”。 宏展开 在c程序编译时将宏名替换成字符串的过程称为“宏展开”。

微软Word和宏病毒

Visual Basic for Applications (VBA),是 Microsoft Office 里的一种编程语言 但由上面的定义,它完全不是一种宏语言。然而,它的功能已经从中发展并最终替代了用户应用程序的宏思想,所以他被广泛地错误地称为是一种宏语言。 VBA 可以访问许多 *** 作系统函数并支持文档打开时自动执行宏。这使得用这种语言写计算机病毒成为可能。1990年代中后期,宏病毒成为了最流行的计算机病毒类型之一。其它的包括宏语言的项目,如openofficeorg,故意从其宏语言中排除了一些功能(如:自动执行)以避免破坏程序。然而,这一特性在很多事务中受到欢迎

以上就是关于c语言中的“宏”是指什么全部的内容,包括:c语言中的“宏”是指什么、C语言中的宏定义怎么用、C语言程序设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9845570.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存