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

什么是宏定义?287

发布网友 发布时间:2023-10-29 02:20

我来回答

5个回答

热心网友 时间:2024-07-09 17:10

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

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

扩展资料

参宏定义中#的用法:

#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)。

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

热心网友 时间:2024-07-09 17:10

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)宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)

热心网友 时间:2024-07-09 17:11

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

热心网友 时间:2024-07-09 17:12

通俗的讲就是对你常用的值或公式进行事先的定义编译,以优化代码吧~
还是看下下面的列子,体会下吧~
表达式:
#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。
记住,如果宏定义了,它的值(在整个程序中)是不会变的,除非你对它再一次宏定义,但这样会降低程序的可读性,所以尽量不要重复定义相同的内容。

热心网友 时间:2024-07-09 17:12

宏定义,别名宏代换,是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
!这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 ...进行一个综合性的项目后评估,评估的内容一般包括 ()。 女主叫柳向晚,男主叫萧远的穿越小说 医学类自考的专业有哪些?53 lg衣物护理机可以加香精吗 索尼dsc_hx9与索尼哪一款更好 想买一台索尼相机送朋友,但不知道买哪一款,有人推荐一下吗... 十八里店什么时候解封 女方的生育津贴算共同财产么1 吕家营16队15队什么时候解封 显示异常多久恢复? 小番茄外表油油的,怎么洗1 为什么圣女果表面有层白毛1 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 一年没满 想更改怎么更改? 名侦探柯南中 英语老师VS关西名侦探 那集 服部平次说的英语...23 一台电脑可以登录几个? 在语文中主语和宾语后的是什么成分19 刚注册的就被封号是怎么回事?26 男主叫萧远的现代小说,求推荐…… 一台电脑登录两个可以吗? 在c语言中什么叫宏定义的常量11 请问一下,宏定义那个什么意思啊, “C语言的宏定义”是什么? 天津公积金贷款网上怎么预约4 瑾途矿脉老板是谁 秦汉于罗马艺术的差异5 删除页眉页脚怎么删 河北固安县吕家营村解封没有? 化学沉淀的溶解平衡常数的数量级怎么看。为什么10^-9.5=...3 北京市朝阳区十八里店吕营村今天下午解封了吗?1 歌词是,隐隐做痛,你给的痛,我不想说太多,后面不记得了,谁能告诉我这... 天津公积金贷款网上怎么预约4 从广珠城轨容桂站到均安生态乐园怎么坐公交车,最快 蘑菇和虾油白菜菠菜能一起炒吗? C语言中常量定义和宏定义有什么区别?27 天津市如何办理公积金贷款5 关于在天津使用住房公积金贷款的问题3 principal research scientist 是...3 我家音箱放大声了,下面的皮就抖的很厉害而且有抖着的声音1 【联东u谷soho城】小区配套幼儿园绿化怎么样?