Sea*_*oob 3 c prototype function-pointers declaration
帮助我理解以下原型.最后一次(int)做什么?
void ( *signal(int sig, void (*handler)(int)) ) (int);
Run Code Online (Sandbox Code Playgroud)
找到最左边的标识符,然后走出去,记住它[]并()在它之前绑定*;IOW *a[]是一个指针数组,(*a)[]是一个指向数组的指针,是一个*f()返回指针的函数,并且(*f)()是一个指向函数的指针。从而,
void ( *signal(int sig, void (*handler)(int)) ) (int);
Run Code Online (Sandbox Code Playgroud)
分解为
signal -- signal
signal( ) -- is a function
signal( sig ) -- with a parameter named sig
signal(int sig, ) -- of type int
signal(int sig, handler ) -- and a parameter named handler
signal(int sig, *handler ) -- which is a pointer
signal(int sig, (*handler)( )) ) -- to a function
signal(int sig, (*handler)(int)) ) -- taking an int parameter
signal(int sig, void (*handler)(int)) ) -- and returning void
*signal(int sig, void (*handler)(int)) ) -- returning a pointer
( *signal(int sig, void (*handler)(int)) )( ) -- to a function
( *signal(int sig, void (*handler)(int)) )(int) -- taking an int parameter
void ( *signal(int sig, void (*handler)(int)) )(int); -- and returning void
Run Code Online (Sandbox Code Playgroud)
该signal函数将信号(sig)与回调函数(handler)相关联,如下所示:
#include <signal.h>
static int interrupt = 0;
/**
* The following function will be called when a SIGINT is
* detected (such as when someone types Ctrl-C)
*/
void interrupt_handler( int sig )
{
interrupt = 1;
}
int main( void )
{
/**
* Declare a pointer to the old interrupt handler function
*/
void (*old_interrupt_handler )(int);
/**
* Save the old interrupt handler while setting the new one
*/
old_interrupt_handler = signal( SIGINT, interrupt_handler );
while ( !interrupt )
{
// do stuff until someone hits Ctrl-C
};
/**
* restore the original interrupt handler
*/
signal( SIGINT, old_interrupt_handler );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3812 次 |
| 最近记录: |