宏和函数的区别

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lyl194458/article/details/70770427

宏和函数的区别;

        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)宏会因为运算符优先级问题,导致错误
展开阅读全文

没有更多推荐了,返回首页