宏定义
预处理器用复制宏代码的方式代替函数调用,省去了参数压栈,生成汇编语言的CALL调用,返回参数,执行return等过程,从而提高了速度
内联函数
是代码被插入到调用者代码处的函数。只适合函数体内代码简单的函数使用,不能包含复杂的结构语句(如while、switch),并且内联函数本身不能调用递归函数,此外,如果内联函数体过大,编译器会放弃内联方式,采用普通方式调用
区别
1. 宏定义是在预处理阶段进行代码替换,而内联函数是在编译阶段插入代码
2. 宏定义没有类型检查,而内联函数有类型检查
引申:内联函数与普通函数的异同?
相同:内联函数的参数传递机制与普通函数相同,但是编译器会在每处调用内联函数的地方将内联函数的内容展开,这样既避免了函数调用的开销,又没有宏机制的缺陷
不同:在于其内部的实现方面
- 普通函数:在被调用时,系统首先要跳跃到该函数的入口地址,执行函数体,执行完成后,再返回到函数调用的地方,函数时钟只有一个复制
- 内联函数:不需要进行一个寻址过程,当执行到内联函数时,次函数展开,如果在N处调用了此内联函数,则次函数就会有N个代码段的复制