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


分析上面的代码,分别采用宏和函数的方式来实现取两数中的较大值,下面就基于此来分析函数和宏之间的区别。

宏是在预处理阶段完成的,只做字符串的替换,而不求值,也不为其分配内存。

函数是在程序运行阶段进行的,所以需要为其分配内存;宏在预处理阶段进行字符串替换时使代码变长,而函数不会。

由于宏是在预处理阶段进行的,所以宏不占用编译时间,而函数是在运行阶段进行的,同时在函数调用过程中涉及内存的分配、参数的传递等操作,所以会占用程序的运行时间。

由于预处理是在编译前进行的,所以预处理并不进行语法检查,而函数调用是在程序运行期间进行的,所以函数调用进行语法检查。

函数只有一个返回值,而利用宏可以得到多个返回值。