宏、函数、宏函数的区别

 
 
先说 宏和函数的区别

1. 宏作的是简单的字符串替换 ( 注意是字符串的替换 , 不是其余类型参数的替换 ), 而函数的参数的传递 , 参数是有数据类型的 , 能够是各类各样的类型 .
2.
宏的参数替换是不经计算而直接处理的 , 而函数调用是将实参的值传递给形参 , 既然说是值 , 天然是计算得来的 .
3.
宏在编译以前进行 , 即先用宏体替换宏名 , 而后再编译的 , 而函数显然是编译以后 , 在执行时 , 才调用的 . 所以 , 宏占用的是编译的时间 , 而函数占用的是执行时的时间 .
4.
宏的参数是不占内存空间的 , 由于只是作字符串的替换 , 而函数调用时的参数传递则是具体变量之间的信息传递 , 形参做为函数的局部变量 , 显然是占用内存的 .
5.
函数的调用是须要付出必定的时空开销的 , 由于系统在调用函数时 , 要保留现场 , 而后转入被调用函数去执行 , 调用完 , 再返回主调函数 , 此时再恢复现场 , 这些操做 , 显然在宏中是没有的 .
 
   如今来看内联函数 :

所谓 " 内联函数 " 就是将很简单的函数 " 内嵌 " 到调用他的程序代码中 , 只样作的目的是为了不上面说到的第 5 , 目的旨在节约下本来函数调用时的时空开销 . 但必须注意的是 : 做为内联函数 , 函数体必须十分简单 , 不能含有循环、条件、选择等复杂的结构,不然就不能作为内联函数了。事实上,即使你没有指定函数为内联函数,有的编译系统也会自动将很简单的函数做为内联函数处理;而对于复杂的函数,即使你指定他为内联函数,系统也不会理会的。
 
  函数和宏函数的区别 就在于,宏函数占用了大量的空间,而函数占用了时间。你们要知道的是,函数调用是要使用系统的栈来保存数据的,若是编译器里有栈检查选项,通常在函数的头会嵌入一些汇编语句对当前栈进行检查;同时, CPU 也要在函数调用时保存和恢复当前的现场,进行压栈和弹栈操做,因此,函数调用须要一些 CPU 时间。 而宏函数不存在这个问题。宏函数仅仅做为预先写好的代码嵌入到当前程序,不会产生函数调用,因此仅仅是占用了空间,在频繁调用同一个宏函数的时候,该现象尤为突出。
相关文章
相关标签/搜索