Да, это допустимо при условии, что uint8
и name
являются типами, которые были определены ранее.
Объявление typedef uint8 (*Funcptr) (name);
говорит, что Funcptr
является типом для указателя на функцию, котораяпринимает name
в качестве аргумента и возвращает uint8
.
В общем случае объявление C, такое как uint8 (*Funcptr) (name)
, дает тип (в данном случае uint8
) и образец выражения (в этомcase (*Funcptr) (name)
) и означает «Когда я использую Funcptr
таким образом, выражение имеет тип uint8
.Итак, мы имеем:
(*Funcptr) (name)
- это uint8
. - Следовательно,
(*Funcptr)
должна быть функцией, принимающей name
и возвращающей uint8
. - Следовательно,
Funcptr
должен быть указателем на функцию, принимающую name
и возвращающую uint8
.
Тогда, поскольку это typedef
, мы знаемчто Funcptr
- это имя этого типа, а не объект, который является указателем на функцию, принимающую name
и возвращающую uint8
.