我们在教科书中遇到了这段代码,但缺乏解释 除了它处理信号的事实。
#include <signal.h>
void (*signal(int signr,
void(*sighandler)(int)
)
)(int)
我知道sighandler
是一个指向函数的指针,但我不明白它是实际执行还是刚刚返回?
与(int)
的通话有什么关系?
它看起来几乎像一个反向演员。
答案 0 :(得分:5)
这是signal
函数的签名。
第一个参数signr
的类型为int
,是您要更改其处理程序的信号。
第二个参数sighandler
是类型为void (*)(int)
的函数指针,即一个采用int
并返回void
的函数。此参数是将处理信号的函数的名称。
该函数返回一个类型为void (*)(int)
的函数指针(与参数2的类型相同),它指向前一个信号处理函数。
打破它:
signal // signal
signal() // is a function
signal(int) // taking a int
signal(int, void (*)(int)) // and a function pointer
// which takes an int and return void
(*signal)(int, void (*)(int))(int) // and returns a function pointer
// which takes an int
void (*signal)(int, void (*)(int))(int) // and returns void
手册页包含一个typedef,使其更加清晰:
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);