Ответ 1
Обычно для удобства чтения вы используете typedef для определения настраиваемого типа следующим образом:
typedef void (* vFunctionCall)(int args);
при определении этого typedef вам нужен тип возвращаемого аргумента для прототипов функций, на которые вы указываете, чтобы привести идентификатор typedef (в данном случае тип void) и аргументы прототипа, чтобы следовать за ним (в этом случае "int арг" ).
При использовании этого typedef в качестве аргумента для другой функции вы определяете свою функцию следующим образом (этот typedef можно использовать почти так же, как любой другой тип объекта):
void funct(int a, vFunctionCall funct2) { ... }
а затем используется как нормальная функция, например:
funct2(a);
Таким образом, весь пример кода будет выглядеть так:
typedef void (* vFunctionCall)(int args);
void funct(int a, vFunctionCall funct2)
{
funct2(a);
}
void otherFunct(int a)
{
printf("%i", a);
}
int main()
{
funct(2, (vFunctionCall)otherFunct);
return 0;
}
и будет распечатываться:
2