宏和函数的区别-创新互联

宏与函数的区别:

成都创新互联主打移动网站、网站制作、网站设计、网站改版、网络推广、网站维护、申请域名、等互联网信息服务,为各行业提供服务。在技术实力的保障下,我们为客户承诺稳定,放心的服务,根据网站的内容与功能再决定采用什么样的设计。最后,要实现符合网站需求的内容、功能与设计,我们还会规划稳定安全的技术方案做保障。

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

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


本文标题:宏和函数的区别-创新互联
本文来源:http://ybzwz.com/article/iehje.html