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

请描述详细些... 请描述详细些 展开
 我来答
问明6E
高粉答主

2019-06-27 · 每个回答都超有意思的
知道答主
回答量:279
采纳率:100%
帮助的人:12.9万
展开全部

作用:

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

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

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

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

扩展资料

无参宏定义

无参宏定义的一般形式为:#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\n",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 请查阅其它资料)

参考资料:

百度百科——define(计算机专业用语)

秒懂百科
2020-12-25 · TA获得超过5.9万个赞
知道大有可为答主
回答量:25.3万
采纳率:88%
帮助的人:1.2亿
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2017-11-28
展开全部
更正一下楼上的:
#define 是宏定义,定义一个全局变量,在整个文件中都可以使用。
如 #define a 3
即认为a 等同于3
int d=10%a;//等同于 int d=10%3;
结果得 d = 1
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-25
展开全部
宏定义
比如说#define a b;
意思就是说当程序中遇到a的时候,将a替换为b
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-25
展开全部
#define a b
的意思是
在下面的程序里面
所有的a都替换成b
这完全是字符替换
所以使用的时候要小心
如果你
#define a x+y
后面用a*a的时候
就会替换为x+y*x+y
而不是(x+y)*(x+y)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式