typedef是一种有趣的声明方式,它为一种类型引入新的名字,而不是为变量分配空间。
一般情况下,typedef用来简洁地表示指向其他东西的指针。
以signal()原型的声明为例。
signal()是一种系统调用,用于通知运行时系统,当某种特定的软件中断发生时调用特定的程序。
当你调用signal(),需要通过参数传递告诉它中断的类型以及用于处理中断的程序。
signal()声明如下:
void *(signal(int sig, void (*func)(int)))(int);
让我们用刚才掌握的技巧来分析这个声明,会发现它的意思如下:
void (*signal( ) )(int);
signal是一个函数,它返回一个函数指针,后者所指向的函数接受一个int参数,并返回void。
其中一个恐怖的参数就是其本身:
void (*func)(int);
它表示一个函数指针,锁指向的函数接受一个int参数,返回值是void。
现在让我们体会一下,怎样用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