一、什么是宏

1、用一个字符串表示有意义的常量或常量表达式(被称为宏)

二、如何来定义宏
1、宏的分类:

A、有参宏:

格式:
		#define  宏名  常量或常量表达式
比如:
		#define  PI  3.14  (以后在程序当中只要看到了PI就代表3.14)
#include<stdio.h> 
#define PI 3.14
void main(){
	int r = 2;
	float s1,s2,s3;
	s1=2*PI*r;//圆的周长
	s2=2*PI*r*r;//圆的面积 
	s3=4*PI*r*r;//求的表面积
	printf("s1=%1.f,s2=%1.f,s3=%1.f",s1,s2,s3);  
}

1、使用宏可以增加程序的灵活性
2、宏名为了区分变量一般用大写字母来表示,当然也可以用小写字母。
3、宏不是语句,所以在定义宏的时候不要加分号,如果加了分号则会连同分号一同替换。
4、宏可以嵌套定义

//宏的嵌套定义
#define M 3
#define N M+4 

5、宏一般写在程序的开头。如果有头文件则将宏放在头文件的下面。
6、在字符串里面当中即使有宏名也不做替换。
7、宏的运行原理:“先替换,再代值” 看以下例子

例一、

#include<stdio.h> 
#define M 2
#define N M+M
void main(){
	int k1,k2;
	k1=M*N;//2*2+2=6
	k2=N*M;//2+2*2=6
	printf("k1=%d,k2=%d",k1,k2);
}

宏是什么就是什么,直接替换,定义宏时没有括号那么在使用的时候也没有括号
在这里插入图片描述

例二:

#include<stdio.h> 
#define M 2
#define N M-3
#define K N-M
void main(){
	int k1,k2;
	k1=K*M/K-M;//N-M*M/N-M-M=M-3*2/M-3-2-2=2-3*2/2-3-3-3=-10 
	k2=K/K;//N-M/N-M=M-3-M/M-3-M=2-3-2/2-3-2=2-3-1-3=2-3-1-3-2=-7
	printf("k1=%d,k2=%d",k1,k2);
}

在这里插入图片描述
B、无参宏:

格式:
	#define 宏名 (参数) 表达式
比如:
	#define FUN(x,y)  x*y	

1、无参宏的参数不要加上类型
2、无参宏的参数是先替换再代值

案例一、

#include<stdio.h> 
#define FUN(x,y) x*y
void main(){
	int a=3,b=4,k;
	k=FUN(a,b);
	printf("%d",k);
}

在这里插入图片描述
案例二、

#include<stdio.h> 
#define FUN(x,y) x*y
void main(){
	int a=3,b=4,k;
	k=FUN(a+b,a-b);//a+b*a-b=3+4*3-4=11
	printf("k=%d",k);
}

在这里插入图片描述
变化上述案例
在这里插入图片描述

案例三、

#include<stdio.h> 
#define F1(x,y) x*y
#define F2(x,y)  F1(x+y,x-y)*F1(x-y,x+y)
void main(){
	int a=3,b=2,k;
	k=F2(a-b,a+b);
	/*F1(a-b+a+b,a-b-a+b)*F1(a-b-a+b,a-b+a+b)
	=a-b+a+b*a-b-a+b*a-b-a+b*a-b+a+b
	=3-2+3+2*3-2-3+2*3-2-3+2*3-2+3+2
	=3-2+3+6-2-3+6-2-3+6-2+3+2 
	=15*/
	printf("k=%d",k);
}

在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐