signal 함수 와 함수 포인터

skycloud의 이미지

void (*signal(int signum, void (*handler)(int)))(int);

singal 함수가 이렇게 정의 되어있더군요 사용하는데야 그냥
signal(number, func)이렇게 사용하면 문제없지만
함수 포인터에 해당되는 부분이 파라미터를 가지는 것은 처음봐서 약간 이해가 안갑니다.

void (*ptr)(int)가 매개변수가 int이고 반환형이 void인 함수 포인터 ptr을 말하는데
저위에거는 해석하는게 약간 애매하더라구요
int형 매개변수를 받는 singal이면서 다시 매개변수 2개를 받는다? 어떻게 하면 더 잘 이해할 수 있을까요?

나빌레라의 이미지

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

이렇게 이해 하시면 됩니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

skycloud의 이미지

감사합니다.

chanik의 이미지

Quote:
void (*ptr)(int)가 매개변수가 int이고 반환형이 void인 함수 포인터 ptr을 말하는데

위와 같은 타입의 함수포인터를 반환하는, 매개변수 없는 함수 func을 표현하려면,

void (*func())(int);

func()이 매개변수로 int 두 개를 받도록 수정한다면,
void (*func(int, int))(int);

func()의 두 번째 매개변수가 앞서 표현하신 함수포인터 타입으로 바뀌면,
void (*func(int, (*ptr)(int)))(int);

이젠 func이 int와 함수포인터를 매개변수로 받고 반환값으로 함수포인터를 돌려주는 함수임이 눈에 보이죠. 질문글을 보니, 함수포인터를 반환하는 함수의 프로토타입에 대한 오해가 있어 애매하게 느끼시는 것 같습니다.

skycloud의 이미지

감사합니다.