signal함수의 반환값은 정확히 뭔가요???

inviolable의 이미지

signal 함수의 원형

#include

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

이렇게 볼 때 signal함수의 반환값은 signal함수 포인터 자체가 되는게 아닌가요???

근데 책에는 signal의 반환값은 이전에 설정되었던 신호 처리부를 가리키는 포인터이다. 라고 나와있는데 헤깔리네요...;;;

raymundo의 이미지

"이렇게 볼때"라고 하신 게 뭘 말씀하시는 건지 모르겠습니다만.

void (*signal(int signo, void(*func)(int)))(int);
 
여기서 파라메터 부분이 복잡하니 지워주면
 
void (*signal())(int);

signal 이 반환하는 것은 (그게 뭔지 의미는 몰라도)
"int 변수 하나를 인자로 받고 리턴 타입이 void 인 함수의 포인터" 타입인 걸 알 수 있죠.

그러니 적어도 signal 함수의 포인터는 아니겠죠. signal 함수는 인자가 하나도 아니고 리턴타입이 void는 더더욱 아니니까요.

그리고 실제로는 매뉴얼에 나왔듯이 이전에 설정되었던 핸들러 함수의 포인터를 반환하고요. (signal()의 리턴타입은 두번째 매개변수 func의 타입과 동일하죠)

좋은 하루 되세요!

inviolable의 이미지

유명한 김모씨 사이트 c고급 강좌에 함수 포인터에 대한 강좌가 있길래 봤더니 제가 전에 이해했던 식으로 나와있는 것 같아서 "이렇게 볼 때" 라고 말한 겁니다.

님의 설명을 듣고 다시 강좌를 봤더니 님이 하신 말씀대로더군요... 제가 아마 잘못봤는 것 같네요... 근데 함수 포인터의 리턴값은 직관적으로 파악하기가 너무 힘드네요... 외우는 수밖에 없나요???

babbab의 이미지

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는 리턴 값이 없음을 가리킴니다. -_-

raymundo의 이미지

저런 걸 직관적으로 어떻게 파악하겠습니까 ^^;

http://www.jiniya.net/tt/555

요런 식으로 읽는 법을 정리한 문서들을 찾아서 예시 코드를 몇 번 읽어보시면 나을 것 같습니다.

좋은 하루 되세요!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.