Как объявить указатель функции в заголовке и c файле?

Я немного запутался в том, как объявить указатель на функцию в файле заголовка. Я хочу использовать его в main и файл под названием menus.c и объявить его в menus.h Я предполагаю. Мы хотим инициализировать, чтобы указать на определенную функцию.

он выглядит так:

void (*current_menu)(int);

Что мы пишем в menus.c, menus.h и main?

Ответы

Ответ 1

Указатель функции по-прежнему является указателем, что означает, что он все еще является переменной.

Если вы хотите, чтобы переменная была видимой из нескольких исходных файлов, самым простым решением является объявить ее extern в заголовке с определением в другом месте.

В заголовке:

extern void (*current_menu)(int);

В одном исходном файле:

void (*current_menu)(int) = &the_func_i_want;

Ответ 2

Часто полезно использовать typedef с указателями функций, поэтому вы можете называть тип чем-то описательным:

typedef void (*MenuFunction)(int);

Тогда у вас будет глобальная переменная этого типа, возможно, в menus.c и объявлена ​​(с помощью extern) в меню men.h:

static void my_first_menu_function(int x)
{
  printf("the menu function got %d\n", x);
}

MenuFunction current_menu = my_first_menu_function;

Из main.c вы можете:

#include "menu.h"

current_menu(4711);

для вызова любой функции, на которую в данный момент указывается значение current_menu.

Ответ 3

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