C语言:宏和函数的区别

宏:#define MAX(a,b) ((a)>(b)?(a):(b))

函数:MAX(a,b) {return a>b?a:b}

宏和函数的区别:

1.宏是与类型无关的;

但函数是跟类型有关的,如果参数的类型不同,就需要使用不同的函数,即使他们执行的任务是相同的;

2. 宏可能会带来运算优先级的问题,导致运算结果出错;

3.宏的参数替换是直接替换的,不经过任何计算;

    而函数调用时会将实参的值传给形参;

4.宏是没法调试的,因为宏是在编译之前进行(先用宏体替换宏名,再进行编译);

  而函数是在编译之后执行时才调用的;

5.宏的参数是不占内存空间的,因为只做字符串的替换;

   而函数调用时参数之间的传递,所以占用内存;

6.宏的速度比函数速度快,因为函数有调用和返回时间的开销,在函数调用时它既要保存现场又要跳转到另一个函数调用中去执     行,然后还要返回现场,但宏函数中就不存在;

7.宏在传参时可以传类型,但是函数不能传类型;

8.宏不能递归,函数可以递归;

9.宏的代码长度很长(除去非常小的宏),每次使用时,宏代码都被插入到程序中,使得程序的长度大幅度增加;

但是函数代码只出现在一个地方,每次使用函数时,调用的是那个地方的同一份代码。

猜你喜欢

转载自blog.csdn.net/qq_42270373/article/details/81154079