Я попробовал следующее, что действительно избегает круговой проблемы, и поэтому это неправильно в контексте (и требует приведения);хотя, если вам не нужно быть действительно круглым или строгим, это работает
#include <stdio.h>
typedef void *(*fp)(void);
fp funcB(void);
fp funcA(void)
{
printf("funcA %p\n", funcB);
return (fp)funcB;
}
fp funcB(void)
{
printf("func B %p\n", funcA);
return (fp)funcA;
}
int main()
{
printf("%p %p\n", funcA, funcB);
printf("%p %p\n", funcA(), funcB());
return 0;
}