Объясните эту подпись типа: void (*signal(int signo, void *(func)(int)))(int)
Сигнатура типа функции signal
становится немного более понятной, если использовать typedef для передаваемых указателей функций:
typedef void (*sighandler_t)(int);
sighandler_t signal(int signo, sighandler_t func);
sighandler_t
- это указатель на функцию, которая принимает параметр int
и ничего не возвращает. Функция signal
принимает такой указатель функции в качестве второго параметра. Она также возвращает указатель функции этого типа.