2017-02-17 2 views
0

Я анализируя программу C, в которой я нахожу странным fucntion вызов здесь является определение функции вызова:Функция Синтаксис

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.

endSignal является параметром, действующим как обратный вызов.

Это передатчик функции в качестве аргументов.

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

+0

Это не тот случай. в моем случае «сигнал» является предопределенной функцией в , поэтому сигнал не может вызывать функцию endSignal для ее использования. – stojo304

+0

@ stojo304 Это точно правильный ответ, и, конечно, 'signal()' может вызывать его функция обратного вызова, вот и все. Почему это не должно быть возможно? – unwind

+0

Да, я просто прочитал определение сигнала и понял эту точку, спасибо – stojo304

Смежные вопросы