It’s the declaration of a function taking an int and a pointer to a function (taking int returning void) and returning a pointer to a function (taking int and returning void).
Explanation, or guide to interpretation
You can interpret by treating everything in parentheses as a single entity and then working inwards using the “declaration follows usage” rule.
void(*signal(int sig, void (*func)(int)))(int);
The entity in the brackets looks like a function taking int and returning void.
Stripping away the outer part:
*signal(int sig, void (*func)(int))
So, signal takes some parameters and returns something that can be dereferenced (due to the leading *) to form a function taking int and returning void.
This means signal is a function returning a pointer to a function (taking int and returning void).
Looking at the parameters it takes an int (i.e. sig) and void (*func)(int) which is a pointer to a function (taking int and returning void).