int (*fn_pointer ( this_args ))( this_args );
declares fn_pointer as a function that takes this_args and returns a pointer to a function that takes this_args as an argument and returns an int . It is equivalent
typedef int (*func_ptr)(this_args); func_ptr fn_pointer(this_args);
Know this a little more:
int f1(arg1, arg2); // f1 is a function that takes two arguments of type // arg1 and arg2 and returns an int. int *f2(arg1, arg2); // f2 is a function that takes two arguments of type // arg1 and arg2 and returns a pointer to int. int (*fp)(arg1, arg2); // fp is a pointer to a function that takes two arguments of type // arg1 and arg2 and returns a pointer to int. int f3(arg3, int (*fp)(arg1, arg2)); // f3 is a function that takes two arguments of // type arg3 and a pointer to a function that // takes two arguments of type arg1 and arg2 and // returns an int. int (*f4(arg3))(arg1, arg2); // f4 is a function that takes an arguments of type // arg3 and returns a pointer to a function that takes two // arguments of type arg1 and arg2 and returns an int
How to read int (*f4(arg3))(arg1, arg2);
f4 -- f4 f3( ) -- is a function f3(arg3) -- taking an arg3 argument *f3(arg3) -- returning a pointer (*f3(arg3))( ) -- to a function (*f3(arg3))(arg1, arg2) -- taking arg1 and arg2 parameter int (*f3(arg3))(arg1, arg2) -- and returning an int
So, finally, homework :). Try to find out the declaration
void (*signal(int sig, void (*func)(int)))(int);
and use typedef to override it.
source share