What is the last (int)
doing?
Consider the signal()
function from the C standard:
void ( *signal(int sig, void (*handler)(int)) ) (int);
The whole thing declares a function called signal
:
signal
takes an int and a function pointer- this function pointer takes an
int
and returnsvoid
- this function pointer takes an
signal
returns a function pointer- this function pointer takes an
int
and returns avoid
- this function pointer takes an
That's where the last int
comes in.
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
You can use the spiral rule to make sense of such declarations, or the program cdecl(1)
If you write:
typedef void (*SignalHandler)(int signum);
then you can instead declare
signal()
as:
extern SignalHandler signal(int signum, SignalHandler handler);
No comments:
Post a Comment