问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么是宏定义?

发布网友 发布时间:2022-03-30 02:36

我来回答

7个回答

热心网友 时间:2022-03-30 04:06

宏定义是高级语言编译器提供的常用语法,其目的是利用某一标识符标识某个文本字符串。在编写程序时,如果程序中反复地使用某个数据或某段程序片段,就可以考虑将这个数据或程序片段定义为宏,然后每个出现该数据或程序片段的地方用宏名替代

选择宏定义来做的好处是程序简洁,可读性好,而且当需要修改这些相同的程序片段时,只要修改宏定义中的字符串即可,不需要修改多处。

扩展资料

参宏定义中#的用法:

#define STR(str) #str

#用于把宏定义中的参数两端加上字符串的""

比如,这里STR(my#name)会被替换成"my#name",一般由任意字符都可以做形参,但以下情况会出错:

STR())这样,编译器不会把")"当成STR()的参数。STR(,)同上,编译器不会把","当成STR的参数。STR(A,B)如果实参过多,则编译器会把多余的参数舍去。

(VC++2008为例)STR((A,B))会被解读为实参为:(A,B),而不是被解读为两个实参,第一个是(A第二个是B)。

参考资料:百度百科- 宏定义

热心网友 时间:2022-03-30 05:24

1.不带参数的宏定义:
宏定义又称为宏代换、宏替换,简称“宏”。
格式:
#define 标识符 字符串
其中的标识符就是所谓的符号常量,也称为“宏名”。
预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。
掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。
即在对相关命令或语句的含义和功能作具体分析之前就要换:
例:
#define PI 3.1415926
把程序中出现的PI全部换成3.1415926
说明:
(1)宏名一般用大写
(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义
(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。
(4)宏定义末尾不加分号;
(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。
(6)可以用#undef命令终止宏定义的作用域
(7)宏定义可以嵌套
(8)字符串" "中永远不包含宏
(9)宏定义不分配内存,变量定义分配内存。
2.带参数的宏:
除了一般的字符串替换,还要做参数代换
格式:
#define 宏名(参数表) 字符串
例如:#define S(a,b) a*b
area=S(3,2);第一步被换为area=a*b; ,第二步被换为area=3*2;
类似于函数调用,有一个哑实结合的过程:
(1)实参如果是表达式容易出问题
#define S(r) r*r
area=S(a+b);第一步换为area=r*r;,第二步被换为area=a+b*a+b;
正确的宏定义是#define S(r) (r)*(r)
(2)宏名和参数的括号间不能有空格
(3)宏替换只作替换,不做计算,不做表达式求解
(4)函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存
(5)宏的哑实结合不存在类型,也没有类型转换。
(6)函数只有一个返回值,利用宏则可以设法得到多个值
(7)宏展开使源程序变长,函数调用不会
(8)宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)

热心网友 时间:2022-03-30 06:58

通俗的讲就是对你常用的值或公式进行事先的定义编译,以优化代码吧~
还是看下下面的列子,体会下吧~
表达式:
#define
标识符
字符串
比如:
#define
PI
3.1415926
它的意思就是把3.1415926赋值给PI
又比如:
#define
a(x,y)
x*y
它的意思就是在主函数中若
x=2,y=3,则a(x,y)=6,
因为它宏定义了a(x,y)=x*y。
记住,如果宏定义了,它的值(在整个程序中)是不会变的,除非你对它再一次宏定义,但这样会降低程序的可读性,所以尽量不要重复定义相同的内容。

热心网友 时间:2022-03-30 08:50

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

热心网友 时间:2022-03-30 10:58

这里有详细的介绍和一些超好用的写法,祝你成为高级编程专家,点击这里

热心网友 时间:2022-03-30 13:22

C语言源程序中,一个字符串可能在程序中多次出现。这时可以将该字符串用一个特定的标识符代替,这种表示方法,称为宏定义。它包括无参宏定义和带参宏定义两类。

热心网友 时间:2022-03-30 16:04

用#define 定义的替换宏函数
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何画出3d立体画 我想问问收到发票怎么做分录 学生平板电脑改成正常平板教程 别人拿qq骂我,但发的是语音,我举报后他却没有什么反应,还是和原来一... 信报箱可以放牛奶吗 2024贵州中高考生免费景点有哪些 这图片出自哪个游戏或同人动漫? 中华人民共和国可再生能源法修正案说明 可再生资源的利用措施 中广核的校招待遇好不好? 什么是冰粉 冰粉都是用什么原料做的呢? 冰粉的制作方法是什么? 冰粉粉的成份和作用 冰粉原料 冰粉粉是什么原料做的? 冰粉什么做的 冰粉是用什么材料做的 鏈夐┈娑﹀湪灏辫屼簡锛屾垜浠鍦ㄤ笉鍦ㄦ剰涔変笉澶是什么字 做冰粉是用生石灰还是熟石灰 冰粉是什么原料做成的 冰粉的原料是什么 冰粉的原料 美团月付可以加油吗?扫码 连和联有什么区别呢? 美团尊享额度怎么恢复 美团尊享会员会自动续费吗 美团开了轻享版还能用尊享吗 c语言中的“宏”是指什么? cswa认证考试时间 怎么在WPS表格中用身份证号提取年龄? 用wps表格从身份证号码中提取出生日期后就不要身份证号码了,怎么办? wps表格怎么用身份证号提取出生日期 wps表格怎么根据身份证号码提取地址 被盗可以报案吗? cad练习图复杂篇第二个怎么做 CAD练习技巧:复杂图形如何布局?圆命令的综合运用! CAD怎样练习? CAD练习题(附带详细绘图步骤) CAD的画图,又碰到有点难度的练习求大神解答 CAD高手是怎么练成的 CAD怎样练习才能熟练 求CAD复杂图纸,我想练习下, 寻找一些CAD制图的练习题,有的给个!谢谢 cad图练习难题 AUTOCAD达到高级水平、需要哪几方面的练习? 请列举CAD的练习题? CAD综合练习题 求cad三维复杂练习图? 谁有cad练习的平面图纸啊。。。复杂点的也可以。。。