宏和函数的区别

来源:互联网 发布:星际争霸mac版 编辑:程序博客网 时间:2024/06/13 20:52

宏和函数的区别;

        C语言中,宏的用处也是十分广泛,宏是一种规则或模式,或称语法替换 ,这种替换在预编译时进行,称作宏展开。

        而函数函数就是一系列C语句的集合,为了完成某个会重复使用的特定功能。需要该功能的时候,直接调用该函数即可宏和函数功能上有相同点,但是也有许多差异,在不同的场合做合适的选择,是我们希望的,为此我们看两个例子:
例子1:
在两个数中找出较大的一个。
#include <stdio.h>
#define MAX(a, b) a>b?a:b
int main()
{
int max=MAX(1, 3);
printf("%d\n",max);
return 0;
}
很明显,这个例子我们用宏更好,因为简单

例子2:
申请一个10个整型大小的空间
#define MALLOC(num, type)\
 (type *)malloc(num * sizeof(type))
//使用
MALLOC(10, int);//类型作为参数
//预处理器替换之后:
(int *)malloc(10 * sizeof(int));
类似于这样功能的例子,明显用宏更好,函数参数没办法只有类型

例子3:
#define MAX(a, b) ( (a) > (b) ? (a) : (b) )
...
x = 5;
y = 8;
z = MAX(x++, y++);
printf("x=%d y=%d z=%d\n", x, y, z);
明显,这个例子用宏的话,会产生副作用,改变了原来的值

因此C语言中,对于宏和函数,我们应该区别二者的差异,以及注意使用场合:
1.相比函数,宏的优势
(1)宏比函数在程序规模和速度方面更胜一筹(因为函数的调用,返回都有开销)
(2)宏与类型无关,使用范围更广
2.相比函数,宏的劣势
(1)每次调用宏时,一份宏定义将插入到程序,除非宏特别短,否则会大幅度增加程序长度
(2)宏没法调试
(3)宏与类型无关,不够严谨
(4)宏会因为运算符优先级问题,导致错误
0 0
原创粉丝点击