最近看到linux系统中的注册信号调用函数
#include<signal.h>
void (*signal(int signumber,void((*fun)(int))))(int);
对于这种复杂的声明从里到外进行分析
首先void((*fun)(int) fun是个指针,它指向一个函数,该函数返回void,有一个int类型的参数。
最后来看signal,从它后面的括号来看它是某种函数或者函数指针,该函数有两个参数signumber和fun
因为我们已经知道了signumber和fun的类型,可以把signal简化成这样
void(*signal(...))(int)
从里向外,signal是个函数,该函数有两个上述类型的参数,返回一个void *F(int)类型的函数指针
为了增加函数的可读性可以使用typedef简化
typedef void (*sighandler_t)(int);
sighandler signal(int signum,sighandler_t handler);