由于signal函数的参数和返回值类型都是同样的函数指针,可以先typedef这个指针类型,然后定义signal,让代码瞬间清晰起来。
typedef void(*sighandler_t)(int);
sighandler_t signal(int, sighandler_t);
这样写是不是比原先清晰多了?
C语言这种类型声明方式其实是一个败笔,在声明复杂类型时十分晦涩,所以Ken Thompson重新设计的Go采用了后置类型声明,在Go中声明同样的函数signal:
signal func(signo int, handler func(int)) func(int)
显然比C好理解多了。