宏定义相关知识点

 //#difine 定义标识符之后 尽量不使用分号。
 #define 宏定义 可以带参数。宏是完全替换,而不是传参的。
#include<stdio.h>
#define SUB(x,y) x-y
#define MUL(x) x*x 
#define DOUBLE(x) ((x)+(x)) //定义宏的时候不要吝啬括号。存在计算优先级的问题。
int main(void)
{
	int a = SUB(10, 2); //10-2=8
	printf("%d \n",a);
	printf("%d \n",b);
	printf("%d \n",c);

	return 0;
}
 //宏参数创建字符串: #运算符
#include<stdio.h>
#define PSQR(x) printf("The square of "#x" is %d.\n",((x)*(x)))

int main(void)
{
	int a = 5;
	
	PSQR(10);
	PSQR(1 + 2);

	return 0;
}
// 预处理粘合剂:## 运算符
#include<stdio.h>//	int b = MUL(1 + 2);//1+2*1+2=5 计算顺序有优先级。
//	int c = 10 * DOUBLE(2);// 40

#define XADD(n) x ## n
#define PXADD(n) printf("x "#n" =%d \n",x##n);
int main(void)
{
	int XADD(1) = 1;  //int x1=1
	int XADD(2) = 2;
	int x3 = 3;
	PXADD(1);// printf("x1= \n",x1)
	PXADD(2);
	PXADD(3);

	return 0;
}
 //慎用宏参数
#include<stdio.h>
#define MAX(x,y) (x)>(y)? (x):(y)
int main(void)
{
	int a = 10;
	int b = 11;
	int ret=MAX(a++, b++);//宏定义的副作用。

	printf("%d \n", ret);// 12
	printf("%d \n",a);// 11
	printf("%d \n", b);// 13 
	return 0;
}
//对比函数的方式和宏的方式
#include<stdio.h>
int Add(int x, int y)// 函数名定义不全部大写。
{
	return ((x) > (y) ? (x) : (y));
}
#define ADD(x,y) ((x)>(y)? (x):(y))  //宏名定义要全部大写。
int main(void)
{
	int a = 1;
	int b = 2;
	int add=Add(a, b);//函数调用和返回会有开销。
	printf("%d \n", add);

	int add2=ADD(a, b);//使用宏则在预处理阶段直接替换,没有函数调用和返回的开销,效率比较高。
	printf("%d \n", add2);

	return 0;
}
 //用宏定义实现方便的malloc 函数内存的动态开辟。
#include<stdio.h>
#define MALLOC(num,type) (type*)malloc(num*sizeof(type))//宏定义的malloc 函数。
int main(void)
{
	int* pm = (int*)malloc(10 * sizeof(int));
	int a = 100;
	int b = 200;
	pm = &a;

	int *pw=MALLOC(10, int);
	pw = &b;
	printf("%d \n", *pm);
	printf("%d \n", *pw);

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值