typedef是一种有趣的声明形式:它为一种类型引入新的名字,而不是为变量分配空间。typedef声明的解读可以按照上一节所介绍的方法进行。
一般情况下,typedef用于简洁地表示指向其他东西的指针。典型的例子是signal()原型的声明。在ANSI C标准中,signal()的声明如下:
void (*signal (int sig, void(*func)(int) ) ) (int);
分析:void (*signal( ) )(int); //signal是一个函数,它返回一个函数指针,后者所指向的函数接受一个int参数并返回void。 signal函数的第二个参数与signal具有同样的形式——void (*func)(int)。
现在用typedef简化其声明:
①typedef void(*ptr_to_func) (int); //表示ptr_to_func是一个函数指针,该函数接受int参数,返回void
②ptr_to_func signal( int, ptr_to_func ); //表示signal是一个函数,它接受两个参数,一个是int,另一个是ptr_to_func,返回值是ptr_to_func。
注意:Ⅰ typedef可以放在声明的中间部分,但是永远不要这么做;
Ⅱ 不要为了方便起见对结构使用typedef
Ⅲ typedef应该用在:
● 数组、结构、指针以及函数的组合类型。
● 可移植类型。比如当你需要一种至少20比特的类型时,可以对它进行typedef声明。
● typedef也可以为后面的强制类型转换提供一个简单的名字,如:
typedef int (*ptr_to_int_fun) (void);
char *p …
= (ptr_to_int_fun)p;