C++内联函数和宏函数对比

239 阅读2分钟

简介:

两者都是在普通函数的基础上为了进一步提高程序性能,或者更加灵活的使用函数而设计的,内联是在C++中才引入的,C中没有内联的概念,内联是宏函数的进一步升级版,因为宏函数存在一些比较大的问题和缺陷

 

 

两者对比:

1.函数展开时机不同:宏函数在预处理阶段就展开了,内联函数在函数调用时展开;因此,函数的调用是有一定的开销的,而宏的展开则不会产生额外的开销

2.传参方式不同:宏函数直接通过替换传参,且传递的是实参本身,内联函数则是通过常规压栈方式传参,可以传值或者传引用;内联函数传参开销更大

3.返回类型不同:内联函数有返回值,而宏函数没有返回值

4.可维护性可读性不同:内联函数有明确的参数和返回值,且函数逻辑直观易读,可读性和可维护性都更强

5.代码复用性不同:内联函数不仅仅能在当前文件使用,还能跨文件使用,并且能够编译成库文件,供其他程序使用,内联函数的复用性强于宏函数

6.报错时机不同:内联函数在编译阶段会进行检查,更早发现问题,而宏函数则要等到运行出错才能发现问题

7.编译器处理方式不同:编译器会自动对内联函数进行优化,而对宏函数不会进行任何额外处理

 

 

宏函数:

优点:

1.执行速度快,没有传参,调用堆栈等步骤

2.对于非常短小的函数,写法非常的简洁

3.因为不进行类型检查,所以通用性很强,使用非常的灵活

 

 

缺点:

1.没有办法调试

2.没有类型安全检查

3.使用过多容易导致代码膨胀

4.形式比较复杂,容易出错,函数逻辑 可读性不高

5.无法进行递归调用,没有返回值