C 解释无效(*信号(内部签名,无效*(函数)(内部))(内部)

C 解释无效(*信号(内部签名,无效*(函数)(内部))(内部),c,linux,function,signals,C,Linux,Function,Signals,请解释此类型签名:void(*signal(int-signo,void*(func)(int)))(int)当将typedef用于传递的函数指针时,signal函数的类型签名更为清晰: typedef void (*sighandler_t)(int); sighandler_t signal(int signo, sighandler_t func); sighandler\u t是指向函数的指针,该函数接受int参数,但不返回任何内容。信号函数将此函数指针作为其第二个参数。它还返回该类型

请解释此类型签名:
void(*signal(int-signo,void*(func)(int)))(int)
当将typedef用于传递的函数指针时,
signal
函数的类型签名更为清晰:

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

sighandler\u t
是指向函数的指针,该函数接受
int
参数,但不返回任何内容。
信号
函数将此函数指针作为其第二个参数。它还返回该类型的函数指针。

C声明需要从内到外读取。复杂函数声明的棘手部分是确定哪一个是最内部的声明器(从哪里开始)。它通常是不是类型标识符的第一个标识符。因此,在这种情况下:

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

声明符是
信号
。在括号内,后缀的优先级高于前缀,因此
signal
是一个包含两个参数的函数(
(int-signo,void*(func)(int))
部分),它返回一个指针(前缀
*
),指向一个包含单个int-arg的函数(末尾是
(int)
),然后返回
void

最后这个(int)是什么?为什么我的问题被否决了?语法错误:实际声明是什么?你应该在问题正文中提问,而不是在标题中。有这样一个问题让人觉得很奇怪:“请解释一下这个函数参数”。哪个函数参数?您正在显示一个包含两个参数的函数的声明。你想解释哪一个?