typedef
(1)定义函数别名
typedef int (*myfun)(int, int);
使用方法:
myfun test_fun;
//相当于 int test_fun(int, int);
//可以用来声明函数,最常用是在结构体里
(2)给变量类型重新定义
typedef struct{
int a;
int b;
}MY_TYPE;
typedef 与 #define 的区别
(1)#define可以使用其他类型说明符对宏类型名进行扩展,但对 typedef 所定义的类型名却不能这样做。例如:
#define INTERGE int;
unsigned INTERGE n; //没问题
typedef int INTERGE;
unsigned INTERGE n; //错误,不能在 INTERGE 前面添加 unsigned
(2) 在连续定义几个变量的时候,typedef 能够保证定义的所有变量均为同一类型,而 #define 则无法保证。例如:
#define PTR_INT int *
PTR_INT p1, p2; //p1、p2 类型不相同,宏展开后变为int *p1, p2;
typedef int * PTR_INT
PTR_INT p1, p2; //p1、p2 类型相同,它们都是指向 int 类型的指针。
简而言之,#define 只是字面上的替换,由预处理器执行,#define A B 相当于打开编辑器的替换功能,把所有的 B 替换成 A。
与 #define 不同,typedef 具有以下三个特点:
- 1.typedef 给出的符号名称仅限于对类型,而不是对值。
- 2.typedef 的解释由编译器,而不是预处理器执行。并不是简单的文本替换。
- 3.虽然范围有限,但是在其受限范围内 typedef 比 #define 灵活。