宏函数是预处理命令中的一种。我在学习别人项目代码时候发现代码作者在底层函数使用了大量的宏函数定义。于是我就想搞明白宏函数应该何时使用,使用宏函数的优点是什么,缺点是什么。本文将会详解宏函数与普通函数的区别。
宏函数与普通函数的区别
函数和宏函数的区别就在于,宏函数占用了大量的空间,而函数占用了时间。
大家要知道的是,函数调用是要使用系统的栈来保存数据的,如果编译器里有栈检查选项,一般在函数的头会嵌入一些汇编语句对当前栈进行检查;同时,CPU也要在函数调用时保存和恢复当前的现场,进行压栈和弹栈操作,所以,函数调用需要一些CPU时间。
而宏函数不存在这个问题。宏函数仅仅作为预先写好的代码嵌入到当前程序,不会产生函数调用,所以仅仅是占用了空间,在频繁调用同一个宏函数的时候,该现象尤其突出。
宏在编译之前进行,即先用宏体替换宏名,然后再编译的,而函数显然是编译之后,在执行时,才调用的.因此,宏占用的是编译的时间,而函数占用的是执行时的时间.
宏函数的使用小结
当函数体量很小时,为了减小系统的开销时间,可以使用宏函数,而函数体比较复杂的情况下,使用函数来定义可以避免宏函数定义带来的副作用。对于频繁被调用的体量小的函数,使用宏函数会提高项目的代码效率。