宏—(宏和函数的区别)
如何定义一个宏函数
- 宏函数
#define Min(x, y) ((x)<(y)?(x):(y))
- 对比普通函数
int Min(int a, int b){return a<b?a:b}
- 定义宏应该注意优先级问题,要在宏定义的变量和函数加括号,避免优先级问题
宏和函数的区别
-
宏做的是简单的字符串替换,而函数是参数传递,宏的参数替换是直接替换,而函数是由实参传递给形参
-
宏在编译前运行(先用宏体替换宏名,再编译),函数是在编译后才调用
-
宏参数不占用空间(只做字符串替换),函数的参数传递是需要内存空间的
-
宏不是类型安全的(编译器不检查类型),函数是类型安全的(参数数据类型不对,编译器会报错)
-
宏编译生成的目标文件比普通的函数生成的目标文件要大
-
在代码量小、功能简单的情况下,宏函数比普通函数的效率要高,但执行复杂功能时,比如递归,宏函数使得行内的代码执行效率降低