1.代码
1>宏定义
#define MAX(x,y) ((x>y)?(x):(y)) int main() { int x = MAX(10, 20); printf("%d", x); return 0; }
2>函数定义
int Max(int x, int y) { return x > y ? x : y; } int main() { int x = Max(10, 20); printf("%d", x); }2.深析二者异同及优缺点
1>代码长度
我们首先要知道,define定义的预处理指令会在代码编译前将define定义的符号替换为对应代码,这时候如果代码中有多次出现define定义的符号,每次使用时,宏代码都会被插入到程序中,就会大大增加代码长度。
函数代码只出现于一个地方,每次使用这个函数时,都调用那个 地方的同一份代码。
2>执行速度
宏定义在函数编译前将宏代码插入到函数中,调用时不会额外浪费时间,运行速度更快。
函数定义存在每次调用和返回的额外开销,所以相对于宏定义来说,函数在执行速度上要慢一些。
3> *** 作符优先级
宏定义是将宏代码直接插入到原代码中,很容易与上下文的代码发生冲突,除非加上括号,否则邻近 *** 作符的优先级可能 会产生不可预料的后果,所以建议宏在书写的时候 多些括号。
函数参数只在函数调用的时候求 值一次,它的结果值传递给函 数。表达式的求值结果更容易预 测。
4>带有副作用的参数
宏定义中,参数可能被替换到宏体中的多个位置,所以带有副 作用的参数求值可能会产生不可预料的结果。
函数参数只在传参的时候求值一 次,结果更容易控制。
5>参数类型
宏定义中,宏的参数与类型无关,只要对参数的 *** 作是合法 的,它就可以使用于任何参数类型。
函数的参数是与类型有关的,如果参数的类型不同,就需要不同的函数,即使他们执行的任务是
相同的。
6>调试
宏是不方便调试的。
函数是可以逐语句调试的。
7>递归
宏不可以递归。
函数可以递归。
3.总结总的来说,宏和函数各有各的好处,我们无法确切的说哪个更好,但他们同样也有各自的优缺点,只要我们熟练掌握了他们的优缺点,在使用时避免他们的缺点,我们就可以在要使用他们是熟练的挑选出最合适的那种方法。
本文到此结束,感谢大家的阅读,欢迎大家点赞评论互关,祝大家万事如意。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)