signal 함수 질문이요

I LY@Google의 이미지

예제에서 이렇게 선언 되었다고 하는데요

void (*signal(int signo, void (*func)(int)))(int);
-> 시그널 발생시 호출되도록 이전에 등록된 함수 포인터 반환

그럼 반환값은 void *형이고 함수이름은 signal 인자는 int signal와 void (*) (int)형 함수 포인터
까지는 알겠는데요.

void다음에 가로'(' 쳐있는것과 마지막에 int형은 뭔가요??

chanik의 이미지

반환값의 타입이 void * 이 아니고 함수포인터인 void (*)(int) 입니다.
새 시그널 핸들러를 등록하면서 이전의 시그널 핸들러를 반환하는 함수죠.
아래의 빨간색 표시된 부분이 반환값 타입을 지정하는 것이고요.

void (*signal(int signo, void (*func)(int)))(int);

과거에도 비슷한 질문이 있었네요.
https://kldp.org/node/163935

I LY@Google의 이미지

void (*signal(int signo, void (*func)(int)))(int);
이렇게 선언해도 된다고 하니깐 딱히 할 말은 없는데요
그래도
void (*)(int) signal(int signo, void (*func)(int));
라고 하는게 좀더 함수 선언에 일정하지안을까 하는생각이 드는데
별로 차이도 안나기도 하고 ㅎㅎ...

chanik의 이미지

비슷한 질문에 대한 답글중에 https://kldp.org/comment/638478#comment-638478 의 내용입니다.

Quote:
typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

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

typedef를 이용하시면 원하시는 형태의 읽기 쉬운 코드가 나오죠.