大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
宏与函数的区别:
成都创新互联主打移动网站、网站制作、网站设计、网站改版、网络推广、网站维护、申请域名、等互联网信息服务,为各行业提供服务。在技术实力的保障下,我们为客户承诺稳定,放心的服务,根据网站的内容与功能再决定采用什么样的设计。最后,要实现符合网站需求的内容、功能与设计,我们还会规划稳定安全的技术方案做保障。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级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。