typedef和define

发布时间 2023-04-05 20:09:09作者: ImreW

(一)typedef/define的基本概念

1.typedef

typedef int BOOL;
#define TRUE 1
#define FALSE 0

定义好之后,就可以像使用基本类型数据一样使用它了,如下面的代码所示:

BOOL bflag=TRUE;

2.与define的区别

 typedef 是在编译过程中被解析的,而#define是在编译之前的预处理时被破解的;#define只是对所定义的别名的简单替换,而typedef可以做到#define能做到的所有事情,而且可以做得更好

(二)typedef void (*T) (void *)

typedef void (*T)  (void * );定义了一个指向函数的指针T, 其 返回值  void 类型,参数也是后面的(void *) 接下来我们就可以直接使用 T 来定义这种 指针变量 ,比如:

T fn1; //等价于void fn1 (void *);
使用:void func(void *); //声明函数
T fn1; //定义变量
fn1=func; //赋值
(*fn1)(); //执行

对于typedef void(*T)(void *),我们进行一层层的剖析

首先写成 void(*T)() 可以看出 T是一个指针,是一个指向返回值为void ,参数为空的类型的函数指针

在加上(void *) 为 void(*T)(void *) 就变成了一个指向 返回值为void,参数为void *类型的指针

在加上上typedef ,加上后,T就不再是一个函数指针了,它代表着一种类型,这种类型可以定义一个 指向 返回值为void,参数为void *类型的指针

比如:

T t;
void func(void *);
t=func