范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

宏函数宏函数的区别

  宏、函数、宏函数的区别
  先说宏和函数的区别:
  1. 宏做的是简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型.
  2. 宏的参数替换是不经计算而直接处理的,而函数调用是将实参的值传递给形参,既然说是值,自然是计算得来的.
  3. 宏在编译之前进行,即先用宏体替换宏名,然后再编译的,而函数显然是编译之后,在执行时,才调用的.因此,宏占用的是编译的时间,而函数占用的是执行时的时间.
  4. 宏的参数是不占内存空间的,因为只是做字符串的替换,而函数调用时的参数传递则是具体变量之间的信息传递,形参作为函数的局部变量,显然是占用内存的.
  5. 函数的调用是需要付出一定的时空开销的,因为系统在调用函数时,要保留现场,然后转入被调用函数去执行,调用完,再返回主调函数,此时再恢复现场,
  这些操作,显然在宏中是没有的.
  现在来看内联函数:
  所谓"内联函数"就是将很简单的函数"内嵌"到调用他的程序代码中,只样做的目的是为了避免上面说到的第5点,目的旨在节约下原本函数调用时的时空开销.但必须注意的是:作为内联函数,函数体必须十分简单,不能含有循环、条件、选择等复杂的结构,否则就不能做为内联函数了。事实上,即便你没有指定函数为内联函数,有的编译系统也会自动将很简单的函数作为内联函数处理;而对于复杂的函数,即便你指定他为内联函数,系统也不会理会的。
  函数和宏函数的区别就在于,宏函数占用了大量的空间,而函数占用了时间。大家要知道的是,函数调用是要使用系统的栈来保存数据的,如果编译器里有栈检查选项,一般在函数的头会嵌入一些汇编语句对当前栈进行检查;同时,CPU也要在函数调用时保存和恢复当前的现场,进行压栈和弹栈操作,所以,函数调用需要一些CPU时间。
  而宏函数不存在这个问题。宏函数仅仅作为预先写好的代码嵌入到当前程序,不会产生函数调用,所以仅仅是占用了空间,在频繁调用同一个宏函数的时候,该现象尤其突出。
  1. 宏在编译之前进行,即先用宏体替换宏名,然后再编译的,而函数显然是编译之后,在执行时,才调用的.因此,宏占用的是编译的时间,而函数占用的是执行时的时间.
  这句分开解释:
  "" 宏在编译之前进行,即先用宏体替换宏名,然后再编译的,""
  解释:假设代码中有这么一条宏定义:#define MAX_LEN 10(10是宏体, MAX_LEN 是宏名)则在编译之前, 也就是在预编译的时候会将代码中所有出现MAX_LEN的地方替换成10后在进行下面的代码编译, 这种替换工作实在编译之前进行的...
  "" 而函数显然是编译之后,在执行时,才调用的""
  解释: 函数调用实在执行时才调用的这是显然的, 因为只有执行时才能根据具体的条件决定调用哪个函数
  ""因此,宏占用的是编译的时间,而函数占用的是执行时的时间. ""
  解释:有了上面的解释,估计这句话也就知道了, 从他的这句话看书的作者把预编译也算作编译的一部分了...
  2.宏的参数是不占内存空间的,因为只是做字符串的替换,而函数调用时的参数传递则是具体变量之间的信息传递,形参作为函数的局部变量,显然是占用内存的.
  同样分开解释:
  "" 宏的参数是不占内存空间的,因为只是做字符串的替换""
  解释:假设有这么个宏定义#define MAX(a, b) (a) > (b) ? (a) : (b) 代码中所有出现(初定义外)MAX(a, b)的地方在预编译以后都变成了 (a) > (b) ? (a) : (b)这个式子, 比如代码中有c = MAX(1, 3)这样的语句, 则在预编译的时候就会变成c = (1) > (3) ? (1) : (3), 这是一种直接的替换, 不会产生中间变量, 所以也就不用为之分配空间 ...
  "而函数调用时的参数传递则是具体变量之间的信息传递,形参作为函数的局部变量,显然是占用内存的."
  解释: 函数调用时需要为每个形式参数在栈上分配空间, 然后将实参的值拷贝进去, 在函数的内部用的都是这个形参, 当函数结束后形参的空间会被自动释放掉, 这也是为什么形参的改变无法改变实参的值的原因...
  ==================================================
  宏: 内联函数:
  1.由预处理器处理 1.编译器处理
  2.对++/--操作有副作用 2.可能会被编译器拒绝(不一定内联)
  3.难于调试 3.可能造成代码膨胀
  4.必定被展开
  ******************************************************************************************************
  宏函数和函数的使用小结:
  函数体量很小时,为了减小系统的开销时间,可以使用宏函数,而函数体比较复杂(需要递归、循环、判断、选择等...)的情况下,使用函数来定义可以避免宏函数定义带来的副作用。 宏函数是在程序编译时进行简单的字符替换,而函数是在程序生成后才进行调用,这时会占用开销时间(主程序函数保留现场,在子函数体中需要进行参数的传递--实参传递给形参以及调用完后形参的销毁等步骤 ),因此宏函数占用的编译时的时间,而函数占用的是执行时的时间。 因此在函数体量简单的情况下,使用宏函数可以极大的提高程序的执行效率和系统开销。

直男送礼只能硬核?蒋龙送张弛荣耀Magic4Pro,背后原因令人破防4月18日一年一度喜剧大会年度冠军组合蒋龙张弛携手年度喜剧编剧六兽,带来了最新情景喜剧老友盖饭,用诙谐的演技再次延续兄弟CP的爆笑故事。剧中,蒋龙(饰演食客)在张弛(饰演厨师)饭店5大国产折叠手机崛起,三星对该市场已失控?性能和销量给出答案三星在折叠屏智能手机市场上的统治地位已经占据了相当长的一段时间,但这一切都在慢慢结束吗?2021年,折叠屏智能手机的全球销量约为900万部。这些销量中的大多数将来自三星。然而,到2iPodtouch宣布停产之后秒售罄网友库克真是奇才iPod产品线作为苹果再一次发家的产品,意义重大,尤其是后期的iPodTouch产品,甚至可以说它是当今iPhone的前身,但苹果官方还是在昨日宣布将会正式停产iPodTouch,历经20多年,苹果宣布停产iPod!网友又是智能手机惹的祸苹果宣布停产iPodtouch,该系列产品已经缺少其必要性,但仍将继续销售直至供货完毕。20多年前,iPod成为了便携式音乐的代名词,也宣告了苹果迅速向全球最大公司发展的开始。现在机器人将解决你养老的各种问题在中国,养儿防老,积谷防饥。是从古至今的优良传统。人往高处走水往低处流。但随着社会的不断发展,外出打工,外出创业。都流向一线城市,留下的都是年老幼小。无法照顾年老父母。人口老龄化,对iBox的个人见解编辑杨耀旺iBox是什么?估计很多人都不了解,盒子App?并不然。它其实是一款数字藏品App。现今社会物质需求已基本达到人们的要求,转而向精神需求进行发展。古董藏品并非人人可及,而通用池化框架commonspool2实践最近在学习使用gRPC的知识过程中,突然发现了gRPC并没有提供一个类似于HttpClient连接池管理的功能,所以搜了一下相关资料,然后发现了一个通用的池化框架commonspo潮汐是怎样形成的?大量海水凭空消失,退潮的海水到底去了哪里?大海涨潮退潮是最常见的现象之一,大海在涨潮的时候,大量海水不断地涌向岸边,最后却伴随着退潮现象,这些水又凭空消失了。大海涨潮的水到底从哪儿来?又从何处悄无生息的消失?点个赞,我们接昨夜今晨发生了什么?YiMagazine北京外卖快递配送不停,海淀重点区域居家办公5月12日,北京市召开新型冠状病毒肺炎疫情防控工作第332场新闻发布会。据发布会消息,5月11日15时至12日15时,北京新增本土新冠肺炎任正非发话了,面对高通的不识抬举,自己根本没在怕的在如今的经济模式下,合作能够促进社会的发展,也能够带动更多企业的进步。在科技领域,华为技术一直在世界范围内属于领先水平,但是,华为和高通的纠纷在近几年却一直没有停下过。这两大品牌商为何手机越卖越贵电视却越卖越便宜?现在只有6寸多的手机价格能卖到5000,而70英寸的4K电视最便宜的可以卖到2500多元,一台高端手机就能换2台大屏电视。而如果时间退回到五六年前,70寸的大屏电视可以轻松卖到1万
8月20日小米造车地址将公开蔚来车主内讧南北马自达将合并长安马自达增资项目已摘牌南北马自达合并在即据腾讯网报道,日前,于今年6月16日挂牌,披露期满日期延长至8月18日的长安马自达汽车有限公司增资项目已无查询相匹配结果。同时据有接近马自新能源汽车续航再次突破,全面进入700公里时代曾经新能源汽车最受人诟病的就是续航能力,而如今已有多款车型续航能力可达700公里,比如最新款的极狐阿尔法S比亚迪唐EV和红旗EHS9。其它续航700公里的汽车使用的电池都是三元锂电诺基亚7110概念机曝光,前后双屏设计最近诺基亚总是推一些概念机,设计理念都不错的。就是不知道是否真的实现。在众多概念机里面,新诺基亚7110概念设计图被高光,其主打前后双屏幕而且主镜头就达到2亿像素,这个的确是不错的等不到下一款FGO,B站要自己做了文丨阑夕B站刚刚发布了相当亮眼的一份季报,以广告为核心的第二曲线,带动了B站整体营收同比增长72,在复杂多变的监管形势下,B站依然保持了不错的增长。唯独游戏收入没怎么涨,已经过长的小米MIX4手机今天上午10点再次开售,售价4999元起小米MIX4手机今天上午10点再次开售,售价4999元起8GB128GB版本售价4999元8GB256GB版本售价5299元12GB256GB版本售价5799元12GB512GB版6400万骁龙888Plus,5999元起售!仅京东卖出3。5万台价值2个亿自从华为手机由于芯片的产能问题而导致货源不足之后,原本属于华为手机的高端旗舰手机市场份额出现了空缺,很多原本计划购买华为高端旗舰手机的消费者变得有些失落,同时也有部分消费者转而去购贬值率是燃油车3倍新能源车保值率调查根据商务部发布的新能源车销量数据,今年17月国内新能源车销量已经超过2020年全年水平,创历史新高达到了147。8万辆,相信全年销量有望超过240万辆。两年前我们做过一期二手新能源iPhone12在充电时出现闪电接口检测到液体的提示怎么办?在iPhoneXS系列iPhoneXR或更新机型中,苹果为iPhone加入了一条新的充电警告,如果闪电端口存在液体,则iPhone在充电时,屏幕上就会出现相关的警告。该功能主要是避荣耀平板V7Pro到底如何,120Hz高刷打游戏居然不掉帧?平板电脑能否成为真正成为生产力工具,一直都是大家入手之前的必要考虑。作为介于智能手机和PC电脑之间的中间环节,比手机更爽比PC更方便,则是平板电脑的存在价值。今天笔者要给大家分享的小米Mix4评测黑科技担当再次上线,几乎完美的全面屏丨钛极客小米MIX4自从小米推出第一款MIX系产品,就给消费者留下了黑科技的印象,并且也一直在探索如何实现更高屏占比的真全面屏,从前置摄像头下置,到滑盖式升降前置摄像头,到第四代产品终于依华为MateRollable可卷曲手机专利,带有拉出式显示屏近日,华为的可拆卸移动设备已经填补了一项新专利。该信息表明,华为正在计划推出一款新的可卷曲手机,我们可能将其称为华为MateRollable,但尚未得到官方确认。即使在困难时期,华