【C语言基础】宏和函数的区别和优缺点

首先,我们先来看以下宏和函数的简单表现形式~


宏函数:#define MAX(a,b)  ((a)>(b)?(a):()b))


#define MAX(x,y) (x)>(y)?(x):(y)
int main()
{
	int i = 10;
	int j = 20;
	printf("max = %d\n",MAX(i,j));

	 system("pause");
	 return 0;
}

普通函数:MAX(a,b)  { return  a>b?a:b;  }


int MAX(int x,int y)
{
	return (x)>(y)?(x):(y);
}
int main()
{
	int i = 10;
	int j = 20;

	printf("%d",MAX(i,j));

	system("pause");
	return 0;
}

上面两段代码表达的是一个意思(求最大值),运行的结果都是 20;
辣么,两者区别是什么呢?
1.宏做的是简单的字符串替换,而函数是参数的传递,参数是有数据类型的。
2.宏的参数替换是直接替换的,不经任何运算。而函数调用时将实参的值传给形参。
3.宏在编译之前进行(先用宏体替换宏名,在进行编译),而函数是在编译之后执行时才调用的。
4.宏的参数时不占内存空间的,因为只做字符串的替换,而函数调用时参数之间的传递,所以占用内存。
5.函数调用需要空间开销,因为在函数调用时,它既要保存现场又要调到另一个函数调用中去执行,然后还要返回现场,但宏函数中就不存在。

优缺点:
1.使用宏函数定义编译生成的目标文件比普通函数生成的目标文件大。
2.宏函数会导致代码的执行效率降低。宏在预处理阶段会被编译器替换掉,而且宏一般只做简单的文本替换,编译器对其不做任何的语法检测。


猜你喜欢

转载自blog.csdn.net/qq_41420688/article/details/80001164