Это становится понятнее, если вы не скрываете указатель за typedef
:
typedef struct a* b (struct c* d);
, где struct a* b (struct c* d);
- это простое объявление старой функции.При использовании typedef b
становится не именем функции, а именем типа.В вашем случае с (*b)
, b
становится именем типа указателя на функцию.
Если мы используем версию typedef
, опубликованную выше, и нам нужен указатель на функцию этого типа, мы объявимэто как b* ptr;
.В то время как в вашем коде вы пишете b ptr;
и не понимаете, что переменная на самом деле является указателем.
Как правило, прятать указатели за typedef
- плохая практика, так как мы получаем более читаемый код, если мы«т.