码迷,mamicode.com
首页 > 其他好文 > 详细

巧妙的运用宏和函数写好你的C代码

时间:2015-12-25 19:31:57      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:巧妙运用宏和函数

 究竟是用函数好,还是宏定义好?

比较两个数或者表达式大小,首先把它写成宏定义:

eg:

#include<stdio.h>

#include<stdlib.h>

#define MAX(x,y) ((x) > (y)? (a) : (b))


int main()

{

int a = 2, b = 4;

int m = 0;

m = MAX(2, 4);

printf("%d\n", m);

system("pause");

return 0;

}

宏只是字符的替换,在预处理阶段就替换到代码当中去了。)

  函数来实现:

    //eg:

#include <stdio.h>
#include <stdlib.h>


int MAX(int x, int y)
{
 int max = 0;
 max = x > y ? x : y;
 return(max);
}
int main()
{
 int max=0,a = 0, b = 0;
 scanf_s("%d%d", &a, &b);
 max=MAX(a, b);
 printf("max=%d\n", max);
 system("pause");
 return 0;

}

(函数在使用的过程中每次都要分配空间,每次都要有进栈出栈的操作降低了代码的效率)

    这里不会用函数原因有三个:首先,函数调用会带来额外的开销,它需要 开辟一片栈空间,记录返回地址,将形参压栈,从函数返回还要释放堆栈。这种开销不仅会降低代码效率,而且代码量也会大大增加,而使用宏定义则在代码规模和 速度方面都比函数更胜一筹;其次,函数的参数必须被声明为一种特定的类型,所以它只能在类型合适的表达式上使用,我们如果要比较两个浮点型的大小,就不得 不再写一个专门针对浮点型的比较函数。三就是代码结构比较简单,使用宏不会显得累赘,且效率高反之,上面的那个宏定义可以用于整形、长整形、单浮点型、双浮点型以及其他任何可以用“>”操作符比较值大小 的类型,也就是说,宏是与类型无关的。

    但是宏在代码比较长的情况下不宜阅读,也就给理解增加了难度性,也会使得代码显得长而累赘,但是函数不会,它结构简明,每次调用同一个函数都会回到同一个人地方去,显得简洁明了

  这段总结摘自《C和指针》和自己的理解。

(图来自网络:)

技术分享




巧妙的运用宏和函数写好你的C代码

标签:巧妙运用宏和函数

原文地址:http://10919090.blog.51cto.com/10909090/1728356

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!