C語言當中的宏定義,宏的相關概念和作用和用法

一、什麼是宏

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);
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章