10.8 函数和宏
在此之前已对函数和宏分别做了相应的讲解,但是没有对比分析它们之间的区别。接下来就来看函数和宏之间究竟有什么样的区别。先看下面的代码。
include<stdio.h>
define max(x,y)x>y?x:y
int fmax(int x,int y)
{
return x>y?x:y;
}
int main(void)
{
int x,y;
x=9;
y=6;
printf("max(x,y)=%d\n",max(x,y));
printf("fmax(x,y)=%d\n",fmax(x,y));
return 0;
}
运行结果:
max(x,y)=9
fmax(x,y)=9
分析上面的代码,分别采用宏和函数的方式来实现取两数中的较大值,下面就基于此来分析函数和宏之间的区别。
宏是在预处理阶段完成的,只做字符串的替换,而不求值,也不为其分配内存。
函数是在程序运行阶段进行的,所以需要为其分配内存;宏在预处理阶段进行字符串替换时使代码变长,而函数不会。
由于宏是在预处理阶段进行的,所以宏不占用编译时间,而函数是在运行阶段进行的,同时在函数调用过程中涉及内存的分配、参数的传递等操作,所以会占用程序的运行时间。
由于预处理是在编译前进行的,所以预处理并不进行语法检查,而函数调用是在程序运行期间进行的,所以函数调用进行语法检查。
函数只有一个返回值,而利用宏可以得到多个返回值。