我不知道该怎么读:
void (*signal(int sig, void (*func)(int))) (int);
我知道void (*func)(int)
是一个指针,指向一个接受int并返回void的函数。
我的猜测是signal是一个接受int和void (*func)(int)
的函数,它返回一个指针,指向一个接受int并返回void的函数(因此是另一个void (*func)(int)
)。我只是对这种用法有点困惑,还有this website不能正确翻译它的事实。
我不知道该怎么读:
void (*signal(int sig, void (*func)(int))) (int);
我知道void (*func)(int)
是一个指针,指向一个接受int并返回void的函数。
我的猜测是signal是一个接受int和void (*func)(int)
的函数,它返回一个指针,指向一个接受int并返回void的函数(因此是另一个void (*func)(int)
)。我只是对这种用法有点困惑,还有this website不能正确翻译它的事实。
1条答案
按热度按时间oug3syen1#
你的阅读是正确的。
signal
函数有两个参数,int
和void (*)(int)
(i.一个指针指向一个函数,该函数接受int
并返回void
),并返回void (*)(int)
。对于cdecl,您需要删除参数名,以便它将其识别为声明。如果你传递这个:
它返回如下:
声明信号为函数(int,指针指向函数(int)返回void)返回指针指向函数(int)返回void
在处理函数指针时,使用
typedef
使代码更具可读性。实际上,signal
的Linux手册页定义如下:这比明确的版本要清楚得多。