Какова сигнатура функции, которая принимает указатель на функцию и возвращает указатель на функцию?

#c #function #pointers

#c #функция #указатели

Вопрос:

Я хотел бы знать, какова сигнатура функции, которая принимает указатель на функцию и возвращает указатель на функцию?

Спасибо,
Сен

Комментарии:

1. Хм, я никогда не был силен в указателях на функции, но мне кажется, что вам нужно было бы знать, какие входные и выходные функции указателя функции имеют в качестве параметров и что они возвращают, чтобы ответить на этот вопрос.

Ответ №1:

Например.:

 void (*f(void (*)(void)))(void)
  

… который намного более удобочитаем с помощью typedefs :

 typedef void (*VoidFunctionPointer)(void);
VoidFunctionPointer f(VoidFunctionPointer);
  

Ответ №2:

Самый простой способ сделать это — использовать typedef:

 typedef int(*int_fn_ptr)(int);

int_fn_ptr my_func(int_fn_ptr f);
  

Отказ от ответственности: я не могу проверить, что здесь нет опечаток.

Комментарии:

1. @Georg изначально я думал, что ты ошибаешься. Затем я вспомнил, что указатели на функции странные и не действуют как обычные typedefs, поэтому я откатил свой откат. Без обид, вы можете изменить последнюю точку на смайлик, если хотите, если вы хотите «вернуть свой кредит» : D

2. Извините и тогда неважно, видели, как люди делают странные вещи здесь «для очков» 🙂

Ответ №3:

Вам нужно лучше определить указатель на функцию, принимаемый в качестве параметра, и возвращаемый тип.
В любом случае, вот пример с простой функцией.

 #include <stdio.h>
#include <stdlib.h> /* abs */

typedef int fx(int);

/* foo takes a function pointer and returns a function pointer */
fx *foo(fx *bar) {
  if (bar) return bar;
  return NULL;
}

int main(void) {
  fx *(*signature)(fx *) = foo;        /* signature points to foo */
  if (signature(abs)) printf("okn");
  return 0;
}