刚才看书的时候突然想到,C语言中inline函数和宏定义的函数是一样的嘛,有宏了为啥还要inline这个东西呢。就问了弟弟,弟弟详细解答了。
- 处理的阶段不一样。inline是在编译阶段处理的,宏是在预处理阶段处理的。
- inline函数是被分配symbol的,是可以取地址的,也就是说链接器看得懂call inline这样的指令。
- inline函数会对参数类型进行检查。宏在预处理阶段不检查参数类型,因此宏可以实现类似泛型的东西。比如
#define max(a,b) (a>b? a: b)
它其实是一个泛型的概念。
但inline就不是了
inline max(int a, int b) {
return a>b? a: b;
}
弟弟讲得挺清楚的。