signal原型:返回值是函数指针的函数

回顾下《指针函数和函数指针深入剖析

函数指针:是一个指向函数的指针;

指针函数:是一个返回值是指针的函数;

 

返回值是函数指针的函数:是一个指针函数,它的返回值是一个指向函数的指针;

 

如何声明?

void (*func(char, int))(int);

声明一个函数,

函数名:func;

参数:一个char和一个int;

返回值:一个函数指针,该指针可指向一个"参数为int,返回值为void的"函数;

 

看起来很烦琐吧?那么,我们,可以让它简单点。

回顾下《typedef 详解

typedef void (*pFunc)(int);    // 定义一种数据类型,叫pFunc。

                                             // pFunc ,是一个函数指针,指向返回值是void,参数是 int的函数;

pFunc func(char, int);        // 返回值是pFunc 指针,参数是(char, int) 的函数

 

signal函数

signal函数的原型为:

void (*signal(int signo, void (*func)(int)))(int);

signal函数有两个参数,一个是 int, 另一个是"指向返回值为void,参数为int的"函数指针;

signal函数返回值,是一个是"指向返回值为void,参数为int的"函数指针;

看起来也很繁琐吧?我们也让它看起来简单一点:

typedef void (*sighandler_t)(int);        // 定义一个"指向返回值为void,参数为int的"函数指针类型sighandler_t

sighandler_t signal(int signum, sighandler_t handler);        // signal函数的参数为一个int,一个sighandler_t,返回值是 sighandler_t

在linux下 man 2 signal 看下,喔,signal 函数,不就是这样么?

signal原型:返回值是函数指针的函数