标准信号库中的C声明
那么,有人能解释一下这应该做什么吗:标准信号库中的C声明,c,function,C,Function,那么,有人能解释一下这应该做什么吗: void (*signal(int sig, void (*func)(int)) ) (int); 它是从标准信号库中获取的定义。函数信号采用以下参数: int sig - a signal value void (*func)(int) - a pointer to a function that takes an int and returns void 并返回: void (*)(int) - a function that takes an i
void (*signal(int sig, void (*func)(int)) ) (int);
它是从标准信号库中获取的定义。函数
信号
采用以下参数:
int sig - a signal value
void (*func)(int) - a pointer to a function that takes an int and returns void
并返回:
void (*)(int) - a function that takes an int and returns void
signal
注册信号出现时要调用的函数并返回上一个函数处理程序。手册页通过引入typedef
使此声明更容易理解,如下所示:
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
sighandler\u t
定义为指向函数的指针,该函数接受int
并返回void
signal
是一个函数,它接受一个int
(信号编号)和一个函数指针,并返回一个函数指针。基本上,它允许决定如何处理发送到程序的特定信号(由参数int sig
标识)
void(*func)(int)
是指向将处理信号的函数的指针(您可以提供自定义函数或使用SIG_-DFL
SIG_-IGN
,这是正常管理或忽略信号的默认操作)
然后,函数
signal
返回指向在调用此函数或SIG_ERR
发生错误之前存在的处理程序的指针。这可用于在最近完成自定义行为后还原默认处理程序。从名称开始:
signal
尽量向右走:
signal(int sig, void (*func)(int))
您有一个带括号的参数列表,因此它是一个包含两个参数的函数:一个名为int
的sig
函数指针和一个名为func
的函数指针(您可以稍后以同样的方式对其进行分析)
然后你打了另一个右翼,所以你向左走:
*signal(int sig, void (*func)(int))
因此函数信号返回指向。。。某物让我们记下括号,再向右走,因为我们可以:
(*signal(int sig, void (*func)(int)) ) (int)
我们还有一个括号内的参数列表,因此signal
返回一个指向函数的指针,该函数将int
作为唯一的参数。然后再向左走:
void (*signal(int sig, void (*func)(int)) ) (int)
因此,函数signal
返回指向函数的指针,该函数取int
并返回void
是的,这种语言很奇怪,但至少是一致的