2017-02-17 3 views
0

Ich bin ein C-Programm analysiert, in der ich eine seltsame fucntion Anruf hier finden, ist die Funktionsdefinition:Funktionsaufruf Syntax

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

Diese Funktion nimmt einen int32_t Parameter! Nun ist diese die wichtigste Funktion „endSignal“

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

return 0; 
} 

die Hauptfunktionsaufruf endSignal ohne Parameter aufrufen, was in diesem Fall passieren?

+1

Es ruft nicht 'endSignal', übergibt er die Funktion als Parameter an eine andere Funktion. – StoryTeller

+0

Der 'Haupt'-Prototyp ist nicht standardkonform, BTW; 'main' sollte' int' zurückgeben und das erste Argument sollte 'int' sein; Dies ist in Ihrer Frage eine "andere Implementierung definiert". –

Antwort

6

Hauptfunktion ruft signal Funktionen auf und nicht endSignal.

endSignal ist der Parameter, der als Callback fungiert.

Dies ist Funktion übergeben Funktionszeiger als Argumente.

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

+0

Dies ist nicht der gleiche Fall. in meinem Fall "Signal" ist eine vordefinierte Funktion in so Signal kann nicht die Funktion endSignal aufrufen, um es zu verwenden .. – stojo304

+0

@ stojo304 Dies ist genau die richtige Antwort, und natürlich 'signal()' kann seine nennen Callback-Funktion, das ist der springende Punkt. Warum sollte es nicht möglich sein? – unwind

+0

Ja, ich lese gerade die Definition von Signal und verstehe diesen Punkt, Danke – stojo304