c提高学习——宏函数

#define _CRT_SECURE_NO_WARNINGS
#include	
#include
#include

#define MYADD(x,y) ((x)+(y))
void test01()
{
	int a = 10;
	int b = 20;
	printf("a+b=%d\n", MYADD(a, b) * 20);
}
int main()
{
	test01();
	system("pause");
	return EXIT_SUCCESS;
}

c提高学习——宏函数_第1张图片
c提高学习——宏函数_第2张图片
不加括号进行约束就不能保证运算的完整性

#define _CRT_SECURE_NO_WARNINGS
#include	
#include
#include

#define MYADD(x,y) ((x)+(y))
//宏函数注意:保证运算的完整性
//宏函数使用场景:将频繁短小的函数,封装为宏函数
//优点:以空间换时间
int myAdd(int x, int y)//x,y在栈上  有入栈和出栈的时间开销
{
	return x + y;
}
void test01()
{
	int a = 10;
	int b = 20;
	printf("a+b=%d\n", MYADD(a, b) * 20);
}
int main()
{
	//test01();
	myAdd(10, 20);
	printf("%d\n", myAdd(10, 20));
	system("pause");
	return EXIT_SUCCESS;
}

在这里插入图片描述

c提高学习——宏函数_第3张图片
实现10+20实在cpu里的寄存器实现的
如果是正常调用实现上述函数,你会发现各种的入栈出栈还有释放的操作,时间上的开销比较大
a,b两个变量入栈的时候,b先入栈,然后是a,从右往左的顺序
c提高学习——宏函数_第4张图片

你可能感兴趣的:(c语言学习,c语言,学习,开发语言)