Cdecl: Decoding C Declarations

Example:
void (*signal(int sig, void (*func)(int)))(int);

declare signal as function that expects (sig as int, func as pointer to
function that expects (int) returning void) returning pointer to function
that expects (int) returning void;