宏非常频繁的运用于执行简单的计算。
那么,为什么不用函数呢?
1.宏在使用时比函数在程序的规模和速度更胜一筹。
2.函数的参数必须申明为一个特定的类型,于是它只能在类型合适的表达式使用。而宏为无类型替换。
而有些情况只能用宏,就是按类型申请空间时。
如:
#define MALLOC(n,type)\
((*type)malloc ((n)*sizeof(type)));
//调用时
int *p = MALLOC (25,int);
但,宏也有缺点: 一份宏定义代码的拷贝将插入到程序中,除非宏非常短,否则使用宏可能会大幅度增加程序长度。
还有宏的副作用,如以下程序在比较时,会出现问题:
#include <stdio.h>
#include <Windows.h>
#define MAX(x,y) ((x)>(y) ? (x) : (y))
int main()
{
int a = 4;
int b = 9;
int c = 0;
c=MAX(a++,b++);
printf("a=%d b=%d c=%d\n",a,b,c);
system("pause");
return 0;
}