您的位置:首页 > 编程语言

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

2015-12-25 17:17 344 查看
究竟是用函数好,还是宏定义好?
比较两个数或者表达式大小,首先把它写成宏定义: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和指针》和自己的理解。(图来自网络:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息