1、用来定义常数
例子:
#define MAXTIME 60
int i;
for(i =0; i < MAXTIME; i++){
//todo something
}
2、定义算式`
例子:
①
#define COUNTOF(array) (sizeof(array) / sizeof(*array) )
typedef struct{
int num;
char name[20];
float score;
}student;
student stu[] ={
{1001, "zhuque", 97.5},
{1003, "zuozhu", 83 },
{1004, "minren", 83 },
{1007, "guaili", 78 },
{1010, "xiaoli", 80 }
};
const student* FindStd(int number){
int i;
const student* std;
std = stu;
printf("sizeof(stu) = %d\n", sizeof(stu));
printf("sizeof(*stu) = %d\n", sizeof(*stu));
printf("COUNTOF(stu)=%d\n",COUNTOF(stu));
for (i = 0; i < COUNTOF(stu); i++){
printf("YES YOU CAN\n");
if (std->num == number){
printf("here\n");
return std;
}
std++;
}
if( i >= COUNTOF(stu) ){
return NULL;
}
}
3、用来定义函数
#include <stdio.h>
int MAX(unsigned long, unsigned long, unsigned long);
#define RGB88(g,b) ((g)>(b)?(g):(b))
#define RGB888(r,g,b) MAX(r,g,b)
int MAX(unsigned long r, unsigned long g, unsigned long b){
return RGB88(r,RGB88(g,b));
}
int main(){
unsigned long r = 100,
g = 200,
b = 300;
printf("THE MAX NUMBER IS [%d]\n", RGB888(r,g,b));
}
输出结果 300
4、用于结构体封装
#define GDefClass(GClassName,GSuperClass)\
struct GClassName {\
GSuperClass gscBase;
#define GDefEnd\
};
typedef struct GObject{
char * name;
int iId;
float score;
};
GDefClass(GBaseWindow,GObject)
short nX;
short nY;
short nWidth;
short nHeight;
GDefEnd
以上的 GDefClass( GBaseWindow,GObject)
....
GDefEnd
就相当于
struct GBaseWindow {
GObject gscBase;
short nX;
short nY;
short nWidth;
short nHeight;
}
这个用法就像C++的类继承的功能,以上的用法就是实现了C中的结构体继承。