简介:
两者都是在普通函数的基础上为了进一步提高程序性能,或者更加灵活的使用函数而设计的,内联是在C++中才引入的,C中没有内联的概念,内联是宏函数的进一步升级版,因为宏函数存在一些比较大的问题和缺陷
两者对比:
1.函数展开时机不同:宏函数在预处理阶段就展开了,内联函数在函数调用时展开;因此,函数的调用是有一定的开销的,而宏的展开则不会产生额外的开销
2.传参方式不同:宏函数直接通过替换传参,且传递的是实参本身,内联函数则是通过常规压栈方式传参,可以传值或者传引用;内联函数传参开销更大
3.返回类型不同:内联函数有返回值,而宏函数没有返回值
4.可维护性可读性不同:内联函数有明确的参数和返回值,且函数逻辑直观易读,可读性和可维护性都更强
5.代码复用性不同:内联函数不仅仅能在当前文件使用,还能跨文件使用,并且能够编译成库文件,供其他程序使用,内联函数的复用性强于宏函数
6.报错时机不同:内联函数在编译阶段会进行检查,更早发现问题,而宏函数则要等到运行出错才能发现问题
7.编译器处理方式不同:编译器会自动对内联函数进行优化,而对宏函数不会进行任何额外处理
宏函数:
优点:
1.执行速度快,没有传参,调用堆栈等步骤
2.对于非常短小的函数,写法非常的简洁
3.因为不进行类型检查,所以通用性很强,使用非常的灵活
缺点:
1.没有办法调试
2.没有类型安全检查
3.使用过多容易导致代码膨胀
4.形式比较复杂,容易出错,函数逻辑 可读性不高
5.无法进行递归调用,没有返回值