Как объявить указатель функции в заголовке и 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
Функция указателя не имеет определения функции. Это не более чем указатель на тип, тип которого задается типом возвращаемого значения функции и списка параметров. Что вам нужно сделать, так это определить функцию с тем же списком параметров и возвращаемым типом, а затем использовать функцию указателя для хранения этого адреса функции. Затем вы можете вызвать функцию через указатель.