2013-06-22 4 views
-3

В signal.h есть декларация signal функции:Что это за декларация и как ее использовать?

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

Как интерпретировать это и то, что использование декларированию в этом странном образе?

+0

HTTP : //cdecl.org –

+1

Люди, не повышайте это. Дюп сотни раз. Просто потому, что вы этого не понимаете, это не значит, что это большой вопрос. На самом деле это не так. –

+0

@ H2CO3 - за исключением того, что если вы вставляете это в cdecl.org, он утверждает, что это синтаксическая ошибка, хотя это не так. – detly

ответ

3

Функция signal принимает int и указатель функции в качестве аргументов и возвращает указатель на функцию. Аргумент указателя функции и указатель возвращаемой функции каждый принимают аргумент int и возвращает void.

signal прототип иногда пишется так:

typedef void (*signal_handler_type) (int); 

signal_handler_type signal (int, signal_handler_type); 

Поскольку функция signal позволяет абоненту заменить существующий обработчик сигнала, он возвращает тот, который был заменен после вызова.

1

на APUE,

Прототип функции сигнала указывает, что функция требует два аргумента и возвращает указатель на функцию, которая возвращает ничего (аннулируются). Первый аргумент функции сигнала, signo, является целым числом. Второй аргумент - это указатель на функцию, которая принимает единственный целочисленный аргумент и ничего не возвращает. Функция , адрес которой возвращается как значение сигнала, принимает один аргумент целых чисел (окончательный (int)). На простом английском языке в этом объявлении говорится, что обработчику сигнала передается одно целое аргумент (номер сигнала) и что он ничего не возвращает. Когда мы вызываем сигнал , чтобы установить обработчик сигнала, вторым аргументом является указатель . Возвращаемым значением сигнала является указатель на предыдущий обработчик сигнала.

недоумение сигнальную функцию прототипа показали, можно сделать гораздо проще за счет использования следующих ЬурейеЕ:

typedef void Sigfunc(int); 

Тогда прототип становится

Sigfunc *signal(int, Sigfunc *) 
+0

Что такое APUE? Ссылка? –

+0

Расширенное программирование в среде Unix. – jxh

0

Signal функция определяет способ обрабатывать сигналы с номером сигнала, указанным signo (здесь).

Параметр func определяет один из трех способов, в которых сигнал может быть обработан программой: вы можете посмотреть [здесь] [1]

[1]: http://www.cplusplus.com/reference/csignal/signal/ для получения более подробной информации

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