я изучал обработку сигналов в UNIX и наткнулся на этотКак использовать указатель функции для возврата указателя функции?
void (*signal(int sig, void (*func)(int)))(int);
Я не понимаю, этот прототип и как это возвращает указатель на функцию.
Я также прочитал этот ответ: How do function pointers in C work?, но это мне непонятно.
Предполагается вернуть указатель на функцию, но я не понимаю, где он указывает тип возвращаемого значения в качестве другого указателя функции.
То, что я вижу, это то, что если я использую (*foo(int n))
в определении функции, возвращаемый тип этой функции foo(int n)
станет указателем функции. Это правильно?
Есть ли более простой пример для этого?
Также: [описание cdecl] (http://cdecl.ridiculousfish.com/?q=void+%28*signal%28int%2C+void+%28*%29%28int%29%29%29%28int % 29) – millimoose
@millimoose Спасибо, что это действительно полезно. – rs911
Кроме того, возвращаемый тип становится указателем функции, добавляя список параметров после сигнатуры функции. (Который уже содержит несвязанный список параметров.) Сравните ['void (* foo (int))'] (http://cdecl.ridiculousfish.com/?q=void+%28%2Afoo%28int%29%29) (который является таким же, как 'void * foo (int)', но не 'void (* foo) (int)') и ['void (* foo (int)) (long)'] (http: //cdecl.ridiculousfish .com /? д = аннулируются +% 28 * Foo% 28int% 29% 29% 29% 28long). Другими словами: возвращаемый тип функции - это материал * вне * подписи, а не только слева от него. – millimoose