浅谈VC中define的使用方法

来源:互联网 发布:周琦nba体测数据 编辑:程序博客网 时间:2024/06/05 08:20

1、用来定义常数

 例子:

#define  MAXTIME 60int 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中的结构体继承。