1. typedef 的用法
1.1.typedef最简单用法.
typedef优于define,特别是在有指针的情况下
typedef char* c_point
c_point p,q; //注意区别与 char* p,q;
1.2.与结构体一起使用
typedefstruct tagNode
{
char *data;
struct tagNode *pNext;
}node,*pNode;
typedefstruct tagNode node;
typedefstruct tagNode* pNode;
简化结构体,简化定义结构体指针和别名
1.3.与函数一起使用
typedef inthandle(int ,int b);
int func1(inta, int b)
{
return a+b;
}
handle *p =func 申明了一个指向handle类型的指针(函数指针), 并指向了func1函数
1.4.typedef 用于简化定义函数指针
typedef void(*add)(int , int); //定义函数指针类型
void func(inta, int b) /*当做传入参数*/
{
printf("%d\n", a+b);
}
voidfunc2(add p) /*以一个add类型的函数指针为参数*/
{
(*p)(3,4); /*调用函数指针*/
}
intmain(void)
{
add q = func; /*定义函数指针q,并指向函数func*/
func2(q);
return 0;
}
1.5.typedef & 复杂的变量申明
使用方
对复杂变量建立一个类型别名的方法很简单,只需要在变量申明表达式中同类型名替代变量名,然后把关键字加载typedef前面就可以.
因此.建立对应的类型为如下:
typedef int*(*q)(unsigned char,unsigned char, int); // *q 代替 指向这个变量类型的指针定义
int*fun(unsigned char a, unsigned char b, int c) //这是一个指向 int型函数的指针变量,定义这一类的变量每次都要写这一长串很麻烦, 因此使用typedef来定义.
{
int *p;
c = int(a+ b);
p =&c;
returnp;
}
void fun1(qhandle) /*只需要定义自己的变量名,而变量类型已经定义好, 就是一个指向 要求的 类型的函数的指针,只需要传入函数名(指针)就可以了.*/
{
int add =handle(1,2,c);
或者
int add = (*handle)(1,2,c);
}
2 预处理的情况解析
预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作,说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。
这样做的好处是,经过处理后的代码,将会变的很精短。
2.1 situation:1
#define OPEN 1
#ifdef OPEN //如果define了OPEN
XXXXXX //执行下面语句
#else //如果没有define
XXXXX
#endif
2.2 situation 2:
#define OPEN 1
#ifndef OPEN //如果没有define OPEN
XXXXXX //执行下面语句
#else //如果define了
XXXXX
#endif
2.3 situation 3:
#if 常量 //常量为真
xxxxx //执行下面语句
#else // 常量为假
xxxxx // 执行下面语句
#endif
2.4 situation 4: //一般同于选择硬件平台
#if define OPEN
XXXXx
#elif defined
XXXXX
#elif defined
XXXXX
#else
xxxx //最后一种情况
#endif