typedef 可以成为你的朋友
typedef 定义了一种新的已知类型的组合. 主要用于复杂的声明和强制类型转换中.
typedef 的定义规则如变量声明的规则一致.
引用 Expert C Programming 中的一句话(中文版p.68):
把 typedef 看成是一种彻底的 "封装" --- 在声明它之后就不能再往里面增加任何别的东西.
typedef int banana;
unsigned banana i; /* 错误! 非法 */
在连续的几个声明中, 用 typedef 能够保证变量的类型一致:
typedef int *int_ptr;
int_ptr a, b; /* a 和 b 都是指向 int 型的指针 */
然而相比较说, 使用宏就不能保证这种特性:
#define int_ptr int *
int_ptr a, b; /* 不好! a 是 int *, b 是 int */
将 typedef 用作复杂的强制类型转换:
typedef int (*fun)(void) ;
int Fun()
{
return 0 ;
}
int main (int argc, char **argv)
{
int *p ;
int (*x)(void) = (fun)p ; /* convenient */
return 0 ;
}
不要为了方便对结构使用 typedef, 因为那样会影响程序的清晰.
最后总结一下 typedef 应该使用的情况:
数组, 结构, 指针以及函数的组合类型.
可以值类型.
复杂的强制类型转换.