Как инициализировать массив указателей на функции?

У меня есть следующий код:

typedef int (*t_Function) (int x);
t_Function Functions[MAX_FUNCTIONS];
int f(int x)
{
    return 0;
}

Но я не могу правильно его инициализировать. Если я добавлю следующую строку:

Functions[0] = f;

тогда компилятор генерирует следующую ошибку:

prog.c:217: warning: data definition has no type or storage class
prog.c:217: error: conflicting types for Functions

Как инициализировать этот массив указателей на функции?

1 ответ

Решение

Вы должны либо сделать это внутри функции, где Functions[0] = f; работает нормально, или с инициализатором массива:

t_Function Functions[MAX_FUNCTIONS] = {f};

Чтобы это работало, f (и все функции, которые вы хотите в Functions) должно быть объявлено в том месте, где появляется это определение. Обратите внимание, что все остальные MAX_FUNCTIONS-1 элементы Functions будет NULL автоматически, если хотя бы один из них заполнен таким образом.

Другие вопросы по тегам