宏和内联函数的区别
- 宏是编译阶段处理的,纯粹是字符串替换(坑确实很多,尤其是在表达式替换的时候),没有任何的类型检查等,十分的不安全;而 inline
内联函数的处理是发生在编译阶段的,有完整的语句类型检查,比宏更安全 - 宏是无法调试的,inline 函数在 debug 版本下和普通函数一样,出了问题很方便进行断点调试,定位问题
- 大量的宏很不方便去阅读源码,inline 函数和普通函数一样,结构模块化清晰,方便阅读代码
- 用宏来代替函数定义,替换后还是一个正常的函数调用,有函数调用开销(栈帧开辟和回退);而是用 inline内联函数是在编译时期,在函数调用点,把函数的代码直接展开,省却了函数调用的开销,代码运行效率高
inline 内联函数和普通函数的区别如下:
-
普通函数的调用在汇编上有标准的 push 压实参指令,然后 call 指令调用函数,给函数开辟栈帧,函数运行完成,有函数退出栈帧的过程
-
而 inline 内联函数是在编译阶段,在函数的调用点将函数的代码展开,省略了函数栈帧开辟回退的调用开销,效率比较高!
图论