2017-02-17 3 views
0
내가 여기 이상한 fucntion 호출이 함수 정의입니다 찾을 수있는 C 프로그램을 분석하고있어

:기능 호출 구문

static void endSignal (int32_t dummy) 
{ 
    if (nTerminating) return; 
    nTerminating=1; 
    printf("terminating....\n"); 
    terminateDLNAsystem(); 
    sleep(1); 
    exit (0); 
} 

이 함수는 int32_t 매개 변수를 사용! 이제 "endSignal를"호출이 주요 기능

int32_t main (int32_t argc, char **argv) 
{ 
/*Statements 
. 
. 
*/ 
signal(SIGINT, endSignal); 
signal(SIGABRT, endSignal); 
signal(SIGQUIT, endSignal); 
signal(SIGTERM, endSignal); 

return 0; 
} 

이 경우에 일이 무엇인지 어떤 매개 변수없이 주요 함수 호출 endSignal?

+1

그것은 호출하지 않습니다는'endSignal', 그것은 다른 함수에 매개 변수로 함수를 전달합니다. – StoryTeller

+0

'main' 프로토 타입은 표준을 따르지 않습니다, BTW; 'main'은'int'를 리턴해야하고 첫 번째 인수는'int'이어야합니다; 이 질문에 "다른 구현 정의 된 방식"입니다. –

답변

6

주 함수는 signal 함수를 호출하며 endSignal은 호출하지 않습니다.

은 콜백 역할을하는 매개 변수입니다.

이것은 함수 포인터를 인수로 전달합니다.

How do you pass a function as a parameter in C?

+0

이것은 같은 경우가 아닙니다. 제 경우에는 "signal"이 의 미리 정의 된 함수이므로 signal이 endSignal 함수를 호출 할 수 없습니다 .. – stojo304

+0

@ stojo304 이것은 정확히 올바른 대답이며 물론 signal()이 호출 할 수 있습니다. 콜백 함수, 그게 전부 요점입니다. 왜 그렇게 할 수 없습니까? – unwind

+0

예 신호의 정의를 읽고이 점을 이해했습니다. 감사합니다. – stojo304