C декларация: уникальная конструкция

0

Ядро Linux имеет следующее определение внутри определения структуры sched_class.

#ifdef CONFIG_SMP
  int  (*select_task_rq)(struct task_struct *p, int task_cpu, int sd_flag, int flags);
  .......
  .......

Теперь, что означает эта линия, у меня довольно хорошие знания в C & C++. Но мне трудно было понять эту конструкцию объявления:

 int  (*select_task_rq)(struct task_struct *p, int task_cpu, int sd_flag, int flags);

Может кто-нибудь объяснить, что это значит и что он делает.

благодаря

Теги:
kernel
declaration
definition

1 ответ

2
Лучший ответ

Это указатель на функцию.

int (*select_task_rq)(struct task_struct *p, int task_cpu, int sd_flag, int flags);

означает, что select_task_rq является указателем на функцию, возвращающую int и принимающую все эти типы параметров.

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

  • 0
    Удивительно, я тоже провел замечательное исследование. Но что, если я хочу универсальный указатель, который указывает на любую функцию, например, функцию ANYRETURN (ANYTYPE, ANYTYPE); ? Я имею в виду, это должно быть больше похоже на указатель void, назначаемый любому типу?
  • 0
    @ Ага, ты ударился ногтем по голове. Пустой указатель может быть преобразован в / из любого другого указателя, включая указатель на функцию.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню