可能重复:
what's the meaning of this piece of code? void (*signal(int sig, void (*func)(int)))(int);
我有一个复杂的声明,它来自“signal.h”头文件,下面是声明。
void (*signal(int sig, void (*func)(int)))(int);
现在,我该如何解析它?如
signal函数接受两个参数'sig'的int类型和'func',它是一个指向函数的指针,该函数将int作为参数并返回void类型;它返回一个指向函数的指针,该函数将int作为参数并返回void。
可以,或者信号是指向功能的指针吗?
答案 0 :(得分:63)
从最左边的标识符开始,然后解决问题,记住[]
之前()
和*
绑定,*a[]
是一个指针数组{{1}是一个指向数组的指针,(*a)[]
是一个返回指针的函数,*f()
是一个指向函数的指针:
(*f)()
signal -- signal
signal( ) -- is a function
signal( sig, ) -- with a parameter named sig
signal(int sig, ) -- of type int
signal(int sig, func ) -- and a parameter named func
signal(int sig, (*func) ) -- which is a pointer
signal(int sig, (*func)( )) -- to a function
signal(int sig, (*func)(int)) -- taking an int parameter
signal(int sig, void (*func)(int)) -- and returning void
*signal(int sig, void (*func)(int)) -- returning a pointer
(*signal(int sig, void (*func)(int)))( ) -- to a function
(*signal(int sig, void (*func)(int)))(int) -- taking an int parameter
void (*signal(int sig, void (*func)(int)))(int); -- and returning void
将信号处理函数signal
与信号func
相关联,并返回指向旧信号处理函数的指针:
sig
答案 1 :(得分:3)
使用cdecl.org,即可获得
将signal声明为函数(int,指向函数的指针(int)返回void)返回指向function(int)的指针返回void
输入
void (*signal(int, void(*)(int)))(int)
这意味着signal
是一个功能。调用signal
的结果是指向函数void f(int)
的指针。
说明:signal()
调用会安装 new 信号处理程序并返回旧信号处理程序(因此,如果您愿意,可以稍后恢复)。
答案 2 :(得分:1)
signal
是一个函数,它接受两个参数并返回一个指向函数的指针,该函数以int
作为参数并返回void
。
signal
所采用的两个参数是int
和指向函数的指针,该函数将int
作为参数并返回void
。
是的,你得到了描述和整体想法。
答案 3 :(得分:1)
不,这是对的。 signal接受2个参数,一个int和一个指向函数的指针,并返回一个指向函数的指针(与func
参数具有相同的签名。)
它类似于(imo)更具可读性:
typedef void (*sig_func)(int);
sig_func signal(int sig, sig_func func);
答案 4 :(得分:0)
void (*signal(int, void (*)(int)))(int);
signal( ) // signal is a function
int, void (*)(int) // the parameter types of the function:
// an int and a function pointer (take int, return void)
void (* )(int); // the return type of the function:
// a function pointer (take int, return void)
//编辑引用John的答案。