欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

宏和函数的优缺点

程序员文章站 2024-03-21 13:23:10
...
#define RESET(p, len) while(len >0) ((char *)p)[--len] =0 
#define ADD(a,b) a+b
#define MUL(a,b) a*b
#define _MIN_(a,b) ((a)<(b) ? (a):(b))
#define MALLOC(type,n) (type*)malloc(n*sizeof(type))
#include <stdio.h>
/*
宏是由预处理直接替换展开的,编译器不知道宏的存在
函数是由编译器直接编译编译的实体,调用行为由编译器决定
多次使用宏会导致程序代码量增加
函数是跳转执行的,因此代码量不会增加
宏的效率比函数高,因为是直接展开,无调用开销
函数调用时会创建活动记录,效率不如宏

宏的副作用
宏的效率比函数高,但是其副作用巨大,容易出错

宏的优点
宏的参数可以是任何C语言实体
宏的参数可以是任意的
宏编写的_MIN_参数可以是int,float等等
宏的参数可以是类型名
*/
void reset(void* p, int len)
{
	while (len>0)
	{
		((char*)p)[--len] = 0;
	}

}

int main7()
{

	int array[] = {1,2,3,4,5};
	int len = sizeof(array);
	int i =0 ;
	for (i = 0;i < 5;i++) 
	{
		printf("%d", array[i]);
	}
	printf("\n");
	//reset(array, len);
	
	RESET(array, len);
	for (i = 0;i < 5;i++)
	{
		printf("%d", array[i]);
	}
	return 0;
 }

int main77()
{
	int i = 1;
	int j = 10;
	printf("%d\n", MUL((ADD(1, 2)), ADD(3, 4))); //printf("%d\n", (1 +2)*3 +4);  从这里可以看到宏的缺点,不太符合用户的直观思维方式
	
	printf("%d\n", _MIN_(i++,j));  //printf("%d\n", ((i++) < (j) ? (i++) : (j)));
	return 0;

}

int main()
{
	int* p = MALLOC(int, 5);//宏的优势体现的很好,可以直接传递int这种参数
}

相关标签: C