实际只要知道宏定义普通用法就可以知道宏函数和自定义函数的区别了
首先宏只是简单的进行替换,发生在预编译阶段
知道这个可以慢慢推出来2者有何区别
例如
宏
MAX((a), (b)) (a) > (b)? (a):(b) ---------1
自定义函数
int get_max(int a, int b)
{
return a>b? a;b; ---------2 等价于return MAX(a,b);
}
宏只是替换,所以2这段语句是可以用1替换的,所以并不存在真正的函数,只是一小部分代码,没有真正的函数就没有出栈和入栈的过程,所以执行速度要快
宏不进行类型检查,这个是有一定风险的
宏在代码里面有多份拷贝,函数只是一份拷贝,所以函数更节约内存,宏可以说只是一个简单的复制粘贴
宏只有传值,函数有传地址和值
宏太多会让代码变得很难阅读