博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
宏函数和函数的区别
阅读量:5127 次
发布时间:2019-06-13

本文共 874 字,大约阅读时间需要 2 分钟。

转载自:

1. 宏做的是简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型.

2. 宏的参数替换是不经计算而直接处理的,而函数调用是将实参的值传递给形参,既然说是值,自然是计算得来的.

3. 宏在编译之前进行,即先用宏体替换宏名,然后再编译的,而函数显然是编译之后,在执行时,才调用的.因此,宏占用的是编译的时间,而函数占用的是执行时的时间.

4. 宏的参数是不占内存空间的,因为只是做字符串的替换,而函数调用时的参数传递则是具体变量之间的信息传递,形参作为函数的局部变量,显然是占用内存的.

5. 函数的调用是需要付出一定的时空开销的,因为系统在调用函数时,要保留现场,然后转入被调用函数去执行,调用完,再返回主调函数,此时再恢复现场,这些操作,显然在宏中是没有的.

内联函数: 所谓"内联函数"就是将很简单的函数"内嵌"到调用他的程序代码中,只样做的目的是为了避免上面说到的第5点,目的旨在节约下原本函数调用时的时空开销. 但必须注意的是:作为内联函数,函数体必须十分简单,不能含有循环、条件、选择等复杂的结构,否则就不能做为内联函数了。事实上,即便你没有指定函数为内 联函数,有的编译系统也会自动将很简单的函数作为内联函数处理;而对于复杂的函数,即便你指定他为内联函数,系统也不会理会的。

函数和宏函数的区别就在于,宏函数占用了大量的空间,而函数占用了时间。大家要知道的是,函数调用是要使用系统的栈来保存数据的,如果编译器里有栈检查选 项,一般在函数的头会嵌入一些汇编语句对当前栈进行检查;同时,CPU也要在函数调用时保存和恢复当前的现场,进行压栈和弹栈操作,所以,函数调用需要一 些CPU时间。 而宏函数不存在这个问题。宏函数仅仅作为预先写好的代码嵌入到当前程序,不会产生函数调用,所以仅仅是占用了空间,在频繁调用同一个宏函数的时候,该现象 尤其突出。

 

转载于:https://www.cnblogs.com/predator-wang/p/4816262.html

你可能感兴趣的文章
基于Go语言构建区块链:part4
查看>>
iOS编程之UIPickerView
查看>>
akoj-1272-字母统计
查看>>
Python_scrapyRedis零散
查看>>
“耐撕”2016.04.13站立会议
查看>>
通过adb启动app应用
查看>>
第十九章 排查和调试Web程序 之 防止和排查运行时问题
查看>>
STM32/GD32上内存堆栈溢出探测研究
查看>>
浅谈 C# ref 和 out 的使用方法
查看>>
css鼠标样式
查看>>
线段树
查看>>
安卓源代码----安卓系统启动过程(初次研究源代码,表述不当还请见谅)
查看>>
hadoop-mapreduce中reducetask执行分析
查看>>
Thinking in UML 学习笔记(三)——UML核心视图之类图
查看>>
插件收藏
查看>>
http响应状态码301和302
查看>>
urp
查看>>
Python3——嵌套函数
查看>>
JUnit中的设计模式:组合模式 Composite
查看>>
Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误
查看>>