一、什麼是宏
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);
}