导航:首页 > 源码编译 > 编译宏的作用

编译宏的作用

发布时间:2023-03-24 07:20:02

⑴ 在C++中#define的作用是什么

作用:

在C或C++语言中,“宏”分为有参数和无参数两种。

被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。

宏定义的作用范围仅限于当前文件,即帆派file1.c中定义#definePI3.14,在file2.c中该宏定义不起作用;通过将#definePI3.14

定义在common.h中,file1.c和file2.c分别#include"common.h"的方式,该宏定义在file1.皮轿蚂c和file2.c中都起作用。

(1)编译宏的作用扩展阅读

无参宏定义

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

其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。

例如:

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

程序1:

#include<stdio.h>

#define M (a+b)

int main(void)

{

int s,a,b;

printf("inputnumbera&b:");

scanf("%d%d",&a,&b);

s = M*M;

printf("s=%d ",s);

}

上例程序中首先进行宏定义,定义M来替代表达式(a+b),在 s= M * M 中作了宏调用。在预处理时经宏展开后该语句变为: S=(a+b)*(a+b) 但要注意的是,在宏定义中表达式(a+b)两边的括号不能少。否则会发生错误。

如当作以下定义后:#define M (a)+(b) 在宏展开时将得到下述语句:S= (a)+(b)*(a)+(b)

对于宏定义还要说明以下几点:

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

2、宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。

3、宏定义其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令。(有关#undef 请查阅其它资料)

⑵ c++里面的宏是什么意思,请懂得的指点一下

非常简单的理解: 宏就是用来告诉编译器如何编译的一些指令.

例如:
#define DEFABC 0x0001

其实没什么不好理解的森败,当编译器编译到#define DEFABC 0x0001这里的时候把它记了下来,然后继续往下编译,以此指颤后编译的时候如果碰到了DEFABC,就把DEFABC这个宏名替换成0x0001常量,说白了也就是起到了替换逗嫌作用记住宏就是文本替换

⑶ 在C语言中“宏是什么意思”

宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译

宏定义又称为宏代换、宏替换,简称“宏”。
格式:
#define 标识符 字符串
其中的标识符就是所谓的符号常量,也称为“宏名”。
预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。
掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。
即在对相关命令或语句的含义和功能作具体分析之前就要换:
例:
#define PI 3.1415926
把程序中出现的PI全部换成3.1415926
说明:
(1)宏名一般用大写
(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义
(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。
(4)宏定义末尾不加分号;
(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。
(6)可以用#undef命令终止宏定义的作用域
(7)宏定义不可以嵌套
(8)字符串" "中永远不包含宏
(9)宏定义不分配内存,变量定义分配内存。
(10)宏定义不存在类型问题,它的参数也是无类型的。

⑷ C语言宏定义

楼主看看书,仔细看看编译预处理都做了哪些事情。

程序设计语言的预处理的概念:在编译之前进行的处理。 C语言的预处理主要有三个方面的内容: 1.宏定义; 2.文件包含; 3.条件编译。 预处理命令以符号“#”开头。

宏定义又称为宏代换、宏替换,简称“宏”。预处理制作单纯的宏展开,并不是检查语法错误,所说义是错误的。

语法错误都是编译阶段才检查的。预处理是不检查的。

⑸ 急(C语言)比较带参的宏与带参的函数之间的区别

区别:
1、宏会在编译器在对源代码进行编译的时候进行简单替换,不会进行任何逻辑检测,即简单正世代码复制而已。
2、宏进行定义时不会考虑参数的举伍肢类型。
3、参数宏的使用会使具有同一作用的代码块在目标文件中存在多个副本,即会增长目标文件的大小。
4、参数宏的运行速度会比函数快,因为不需要参数压栈/出栈操作。
5、参数宏在定义时要多加小心,多加括号。
6、函数只在目标文件中存在一处,比较节省程序空间。
7、函数的调用会牵扯到参数的传递,压栈/出栈操作,速度相对较慢。
8、函数的参数存在橘卖传值和传地址(指针)的问题,参数宏不存在。

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

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

“宏”这个词的使用暗示着将小命令或动作转化为一系列指令。
计算机语言如C语言或 汇编语言有简单的宏系统,由编译器或汇编器的预处理器实现。C语言的宏预处理器的工作只是简单的文本搜索和替换,使用附加的文本处理语言如M4,C程序员可以获得更精巧的宏。

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

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

(6)编译宏的作用扩展阅读

A类宏是用G65 Hxx P#xx Q#xx R#xx或G65
Hxx P#xx Qxx
Rxx格式输入的,xx的意思就是数值,是以um级的量输入的,比如你输入100那就是0.1MM #xx就是变量号,变量号就是把数值代入到一个固定的地址中,固定的地址就是变量。

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

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

⑺ c语言中“宏”是个什么东西 有什么意义

宏定义的作用在预编译阶段,形如 #define A B 就是宏定义了,作用就是在预编译阶段将程序中的A全部视为B,举个例子:
我们在程序最开始,声明如下宏定义
#define pi 3.1415926
那么在我们写程序的时候,我们可以直接使用pi作为一个常量来使用,那么当我们编译程序的时候,编译器会自动将程序中出现的pi替换成3.1415926

第二个例子,利用宏定义定义傻瓜函数
#define mul(A,B) A*B
那么我们可以将mul()在程序中当成函数来使用,为什么叫做傻瓜函数一会来解释,使用方法
mul(3,5) 那么这段代码就相当于计算3*5=15
那么当我们如下使用时就会出现问题
mul(3+2,3) 我们期待的结果是15,而实际结果是9,为什么呢?因为在程序会如下转换
3+2*3=3+6=9 这也就是为什么我们管宏定义出来的函数叫傻瓜函数的原因了~~~

楼主呀~~~完全手写,一定要好评呀!^_^

⑻ 请问EXCEL中的宏是什么,有什么用,和函数有什么关系吗

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

⑼ “C语言的宏定义”是什么

宏定义又称为宏代换、宏握族野替换,简称“宏”。

是段喊C提供的三种预处理功能的其中一种。

⑽ 请问C语言中带参数的宏和函数的比较

宏是用于编译器处理的,他在程序编译时,会在对应位置展开成代码。。,这就相当于你在告诉编译器,我想在这个位置加一些代码,代码的内容已在宏中定义,请编译器自己支找。。。,也就是说程序在运行时,升李早已变成了正并对应位置上的代码,此时已没有宏的概念了。。。。
而函数则是运行时,调用。他不会在编译时,在对应位置上加上函数代举笑迹码,只是加上一个函数入口指针。。。从这个入口去运行一段代码。。。运行完了之后回到当前位置继续执行。。。。
可以简单的认为,宏是在编译时上起作用,而函数是运行时起作用。。。

阅读全文

与编译宏的作用相关的资料

热点内容
免费看慢网站 浏览:150
外国影片女孩头一次出去上外地 浏览:478
程序员创业接到小程序订单 浏览:391
java复用反编译代码 浏览:551
qq聊天发送的文件在哪个文件夹 浏览:819
代理服务器地址格式是什么意思 浏览:443
苏e行app为什么会有登录过期 浏览:800
杰森坐牢 下象棋是什么电影 浏览:408
苹果相机也么加密 浏览:891
java图片打印 浏览:173
恶魔小丑电影 浏览:548
apriori算法软件 浏览:24
波利亚怎样解题pdf 浏览:570
法国电影耽美 浏览:642
java调用迅雷 浏览:423
开发云服务器cvm需要做些什么 浏览:259
程序员长期变胖 浏览:629
平板怎么创建图标文件夹 浏览:220
alphafrance制作的影片 浏览:281
小电影网站有那些 浏览:191