signal함수의 반환값은 정확히 뭔가요???
글쓴이: inviolable / 작성시간: 화, 2012/11/06 - 10:24오후
signal 함수의 원형
#include
void(*signal(int signo, void(*func)(int)))(int);
이렇게 볼 때 signal함수의 반환값은 signal함수 포인터 자체가 되는게 아닌가요???
근데 책에는 signal의 반환값은 이전에 설정되었던 신호 처리부를 가리키는 포인터이다. 라고 나와있는데 헤깔리네요...;;;
Forums:
"이렇게 볼때"라고 하신 게 뭘 말씀하시는 건지
"이렇게 볼때"라고 하신 게 뭘 말씀하시는 건지 모르겠습니다만.
signal 이 반환하는 것은 (그게 뭔지 의미는 몰라도)
"int 변수 하나를 인자로 받고 리턴 타입이 void 인 함수의 포인터" 타입인 걸 알 수 있죠.
그러니 적어도 signal 함수의 포인터는 아니겠죠. signal 함수는 인자가 하나도 아니고 리턴타입이 void는 더더욱 아니니까요.
그리고 실제로는 매뉴얼에 나왔듯이 이전에 설정되었던 핸들러 함수의 포인터를 반환하고요. (signal()의 리턴타입은 두번째 매개변수 func의 타입과 동일하죠)
좋은 하루 되세요!
답변 감사합니다.
유명한 김모씨 사이트 c고급 강좌에 함수 포인터에 대한 강좌가 있길래 봤더니 제가 전에 이해했던 식으로 나와있는 것 같아서 "이렇게 볼 때" 라고 말한 겁니다.
님의 설명을 듣고 다시 강좌를 봤더니 님이 하신 말씀대로더군요... 제가 아마 잘못봤는 것 같네요... 근데 함수 포인터의 리턴값은 직관적으로 파악하기가 너무 힘드네요... 외우는 수밖에 없나요???
외우시기 보다는..
void (*signal(int signo, void(*func)(int)))(int);
-> signal 부터 시작이요.
()이 precedence가 높고 associativity가 왼쪽에서 오른쪽이므로 오른쪽으로 갑니다.
-> signal(int signo, void(*func)(int))
signal은 int signo과 fucntion func를 가르키는 포인터를 아규멘트로 갖는 function 인데 그 func는
한 int와 void를 리턴하는 function 이지요.
-> void (*signal(int signo, void(*func)(int)))(int);
그후 *를 따라 왼쪽으로 가면...
signal은 int signo과 fucntion func를 가르키는 포인터를 아규멘트로 갖는 function 인데 그 func는
한 int와 void를 리턴하는 function 이며 singal이 리턴하는 값은 한 int를 아규멘트로 갖고 void를
리턴하는 function을 가르키는 포인터지요.
참조 http://cdecl.org/
void는 리턴 값이 없음을 가리킴니다. -_-
저런 걸 직관적으로 어떻게 파악하겠습니까
저런 걸 직관적으로 어떻게 파악하겠습니까 ^^;
http://www.jiniya.net/tt/555
요런 식으로 읽는 법을 정리한 문서들을 찾아서 예시 코드를 몇 번 읽어보시면 나을 것 같습니다.
좋은 하루 되세요!
댓글 달기