我们在教科书中遇到了这段代码,除了处理信号这一事实外,还没有解释.
#include <signal.h>
void (*signal(int signr,
void(*sighandler)(int)
)
)(int)
Run Code Online (Sandbox Code Playgroud)
我知道这sighandler是一个函数的指针,但我不明白它是否实际执行或只是返回?
和电话有(int)什么关系?它看起来几乎像一个反转的演员.
这是该signal功能的签名.
第一个参数signr是type 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
Run Code Online (Sandbox Code Playgroud)
手册页包含一个typedef,使其更加清晰:
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
Run Code Online (Sandbox Code Playgroud)