Я уже давно борюсь с указателями на функции. Может быть, вы, ребята, можете мне помочь.
В моем проекте у меня есть несколько функций для одного устройства, и каждая функция записана в своем собственном файле .c. Общие функциональные возможности (которые применяются ко всем функциям устройства) записаны в generic.c.
Я хотел бы создать массив указателей на функции в общем файле c и заполнить этот массив в других файлах функций. Поэтому я могу вызвать нужную функцию на основе идентификатора функции устройства в универсальном файле.
Что у меня сейчас есть:
// in generic.h:
typedef void (*func_ptr_t[])(arguments);
extern func_ptr_t devFunctions[3];
И я бы хотел:
// in function1.c:
#include "generic.h"
devFunctions[1] = &functionName;
Но затем он жалуется на отсутствие спецификатора типа И Инициализатор массива должен быть списком. Если я добавлю тип как
func_ptr_t devFunctions[1] = &functionName;
Я получаю ошибку о неполном типе элемента 'func_ptr_t'.
Я не могу инициализировать весь список массивов из одного файла, поскольку он заполнен из нескольких файлов.
У кого-нибудь есть идеи, как с этим бороться?
Спасибо!
-edit-
Поскольку вы не можете использовать операторы вне функций, я изменил свое приложение. Теперь он больше не использует массив и обновляет указатель функции в generic.c при вызове определенного файла функции.
Итак, конечный результат:
В generic.h:
typedef void (*func_ptr_t)(<function arguments>)
В generic.c:
func_ptr_t devFunction;
В function1.c:
#include "generic.h"
extern func_ptr_t devFunction;
void functionToBeCalledFromMain( void ){
devFunction = functionName;
}
void functionName (void ){
// Function to be called from generic.c via function pointer
}