1.普通用法(简单的文本替换)
例如:
#define N 10
#define PI 3.14
2.结合运算符实现简单功能
例如:
① 计算数组元素个数
#define ARR_SIZE(n) sizeof(n)/sizeof(n[0])
②获得两个数中最大的那个
#define MAX(a,b) ((a) > (b) ? (a) : (b))
注:一定考虑到运算符优先级带来的影响,所以一般每个变量都加上"()"。
例如:
#define DOUBLE(x) x+x
i=5*DOUBLE(5);
最终不是我们想要得到的求和结果!
3.使用宏给某些变量进行初始化
例如:
①给一个数组进行初始化(固态法)
#define INIT {1,2,3,4}
int arr[]=INIT;
②给结构体进行初始化(动态法)
typedef struct{
int a;
int b;
int c;
}A;
#define INIT1(X,Y,Z) {X,Y,Z}
#define INIT2(X,Z) {.a=X, .C=Z}
A s1=INIT(1,2,3); //A s1={1,2,3}
A s2=INIT(4,6); //A s2={.a=4, .c=6}
4.编写宏函数
注:编写宏函数建议结合do {}while(0);语句,将其变成一个整体
补充,使用do{}while(0);语句编写函数的好处(个人见解):
①分号问题:每条语句后面都要加分号
②用于条件语句时,逻辑错误(变成了只有第一句有效)