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

内联函数与宏的区别(C++)

发布网友 发布时间:2022-04-14 21:43

我来回答

2个回答

热心网友 时间:2022-04-14 23:13

C++中的内联函数提供了宏之上的功能。宏是内联代码的简单实现形式。。不过两者有很大的区别。
内联函数采用的是值传递,而宏定义采用的是对等替换。这一点非常重要,宏定义没用好,很可能在使用过程中陷入误区。
例如下面这个宏:
#define
MAX(a,
b)
a>b?a:b
当我们这样使用宏时,没有什么问题:
MAX(
num1,
num2
);
因为宏展开后变成
num1>num2?num1:num2;。
但是,如果是这样调用的,MAX(
17+32,
25+21);
呢,编译时出现错误,原因是,宏展开后变成:17+32>25+21?17+32:25+21,Woh,这是什么啊?
所以,宏在使用时,参数一定要加上括号,上述的那个例子改成如下所示就能解决问题了。
#define
MAX(
(a),
(b)
)
(a)>(b)?(a)b)
即使是这样,也不这个宏也还是有Bug,因为如果我这样调用
MAX(i++,j++);

经过这个宏以后,i和j都被累加了两次,这绝不是我们想要的。所以,在宏的使用上还是要谨慎考虑,因为宏展开是的结果是很难让人预料的。而且虽然,宏的执行很快(因为没有函数调用的开销),但宏会让源代码澎涨,使目标文件尺寸变大,(如:一个50行的宏,程序中有1000个地方用到,宏展开后会很不得了),相反不能让程序执行得更快(因为执行文件变大,运行时系统换页频繁)。因此,在决定是用函数,还是用宏时得要小心。
相同点:两者都是在预处理阶段,对代码块,进行替换。。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
宜昌夷陵区丶西陵区哪个区最繁华 宜昌哪些地方租房子好 宜昌CBD中心商务区项目分段定位 宜昌哪个地段房子好 奥迪a6油箱盖按键在什么位置 奥迪a6汽车加油盖按钮在哪 奥迪a6油箱盖怎么开 奥迪a6油箱盖的开关在哪里 图文结合带你搞懂MySQL日志之Error Log(错误日志) 变电站电磁辐射安全标准 ...马自达车辆搭载创驰蓝天GVC系统技术的好处是什么? GVC是什么鬼?你们知道么? 我的微信被盗了,还把手机号给换了,请问,怎么要回来? 手机换号玛、使用微信、警方能通过微信定位吗? 手机卡怎么换,自己可以换吗还是需要到手机店里找人帮忙换 不知道_方的姓名手机号码也换了怎么找人家还债 marginNote几个app如何同步 marginnote怎样制作思维导图 宏和内联函数的区别是什么如题 谢谢了 桀怎么读音 奔驰S320的保险费要多少? gle350奔驰新车保险费价格 思量,削减,瘦削,对峙,歼灭,冬蜇,渣滓,砒霜怎么读拼音是什么? 诡计 收敛 奸灭 入场券 抑扬 阻挠 特殊 海啸拼音怎么写 “殄灭”汉语拼音怎么拼读? “千山鸟飞绝 万径人踪灭”的拼音是什么? 修一个水龙头要多少钱? 刚刚买了西屋烤箱,怕直接用有味道怎么办? 怎样修理水龙头??? 西屋和松下烤箱哪个好 我家自来水龙头坏了,我去哪找人修呢? 用西屋电烤箱防止食物过焦怎么处理? 该如何打造高质量的微信和朋友圈?你觉得呢?能不能说下? 分享下如何打造高质量的微信和朋友圈? 绝缘读音是什么 绝缘棒的拼音 绝缘洋 的拼音输入法怎么打 请问绝缘电阻是什么意思?? ZR-BV是什么意思? 因人之力而敝之的因是什么意思 因人之力而敝之不仁失其所与不知以乱易整不武的翻译是什么? ”能以足音辨人”中的”以”与”因人之力而敝之”的”因”分别是什么意思?词性是否相同? 《烛之武退秦师》中“因人之力而敝之,不仁”的“因”字是何用法? 芒果好吃~皮不好包!谁有小窍门? 因人之力而敝之不仁失其所与不知以乱易整不武的翻译 因人之力而敝之 翻译 因人之力而敝之,不仁,失其所与,不知 因人之力而敝之不仁是什么句式 叱奴下车,因格杀之的“因”是什么意思? 因人之力而敝之 蔽的意思 烛之武退秦师中,因使人之力而敝之的敝是什么意思 “因人之力而敝之”中的“而”表什么意义?