Это разве на самом деле указатель функции - это определение типа указателя функции:
typedef struct patchwork *(*create_patchwork_value_fct) (const enum nature_primitif);
Таким образом, это определяет тип указателя на функцию под названием create_patchwork_value_fct
. Это указатель на функцию, которая принимает один параметр (const enum nature_primitif) и возвращает struct patchwork*
- то есть указатель на структуру патчей.
Давайте посмотрим, как это можно было бы использовать:
void someFunc(create_patchwork_value_fct funcToCall, enum param)
{
funcToCall(param);
}
struct patchwork* CreateAPatchworkValue(enum nature_primitif enumVal)
{
struct patchwork* pwork = malloc(sizeof(struct patchwork));
pwork->someVal = enumVal;
return pwork;
}
void main()
{
someFunc(CreateAPatchworkValue, <a valid nature_primitif enumeration value>)
}
в этом примере, main()
вызовы someFunc()
, передавая ему указатель на CreateAPatchworkValue в качестве параметра funcToCall
, а значение из nature_primitif перечисления.
someFunc затем вызывает funcToCall, что на самом деле является вызовом CreateAPatchworkValue.
Этот указатель функции typedef работает точно так же, как если бы вы делали 'typedef int * obscure_t; ... obscure_t ptr = & some_int; ' – Lundin