Начните с названия:
signal
Идите как можно дальше:
signal(int sig, void (*func)(int))
У вас есть список параметров в скобках, так что это функция, принимающая 2 параметра: int
с именем sig
и указатель функции с именем func
(вы можете проанализировать его таким же образом позже).
Затем вы нажимаете другую правую пару, поэтому вы идете налево:
*signal(int sig, void (*func)(int))
Итак, функция signal
возвращает указатель на ... что-то. Давайте уберем скобки и снова перейдем прямо, так как мы можем:
(*signal(int sig, void (*func)(int)) ) (int)
У нас снова есть список аргументов в скобках, поэтому signal
возвращает указатель на функцию, которая принимает int
в качестве единственного аргумента. Затем снова идите налево:
void (*signal(int sig, void (*func)(int)) ) (int)
Таким образом, функция signal
возвращает указатель на функцию, принимая int
и возвращая void
.
Да, этот язык странный, но, по крайней мере, он последовательный. :)