宏和函数的区别

发布时间:2020-06-18 07:56:09 作者:我是你帆哥
来源:网络 阅读:2361

宏与函数的区别:

1、宏做的是简单的字符串替换,不受类型限制;而函数是参数的传递,受到参数类型的限制。


2、宏体替换宏名是在编译之前就完成的,函数参数的调用是在函数执行时将实参传给形参的。


3、宏参数的替换是不经过计算的,有可能会带有副作用,所以我们在写宏体的时候一般在能加括号的地方都不要吝啬括号,但有时候这也不能解决副作用的问题。函数在传参时传的是值,不会产生副作用。

#define MAX (a,b)  ((a)>(b)?(a):(b))
int main()
{
                 int a = 10;
                 int b = 20;
                 int ret = MAX (a++, b++);
                 printf( "%d  %d  %d\n" , a, b, ret);
                 system( "pause");
                 return 0;
}


结果是: 11  22  21 

这就是由宏所带的副作用造成的,因为宏进行的是字符串的替换,替换后的式子是:((a++)>(b++)?(a++):(b++))。如果是函数,则传递的是值,就不会产生副作用。


4、因为函数是在执行期间调用的,所以可以进行调试;宏在编译前完成的,所以不可以进行调试。


5、函数支持递归,宏不支持。


6、函数在调用时会产生时间和空间上的开销;宏在调用时则没有,因为宏进行的只是简单的字符串替换。


7、如果使用宏比较多,宏体在展开时会产生大量的代码,大大降低运行时间。


推荐阅读:
  1. rollup函数 和cube函数 的区别?
  2. Qt全局宏和变量

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

函数 区别 宏和

上一篇:全生命周期的思维方式

下一篇:Flask报错笔记:ImportError: No module named 'MySQLdb'

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》