从最左边的标识符开始,逐步向外扩展。要记住[]
和()
的优先级高于*
,因此*a[]
是指针数组,(*a)[]
是指向数组的指针,*f()
是返回指针的函数,(*f)()
是指向函数的指针:
signal
signal( )
signal( sig, )
signal(int sig, )
signal(int sig, func )
signal(int sig, (*func) )
signal(int sig, (*func)( ))
signal(int sig, (*func)(int))
signal(int sig, void (*func)(int))
*signal(int sig, void (*func)(int))
(*signal(int sig, void (*func)(int)))( )
(*signal(int sig, void (*func)(int)))(int)
void (*signal(int sig, void (*func)(int)))(int);
signal
函数将信号处理函数func
与信号sig
相关联,并返回旧的信号处理程序函数指针:
void new_interrupt_handler(int sig)
{
...
}
int main(void)
{
void (*old_interrupt_handler)(int);
...
old_interrupt_handler = signal(SIGINT, new_interrupt_handler);
...
signal(SIGINT, old_interrupt_handler);
...
}
typedef int foo(void)
:foo是一个函数指针,但你可以简写为函数,因为你可以这样做foo x; x();
。 - Benoit