Автоматизированное решение - cdecl.
Как правило, вы объявляете переменную так, как вы ее используете. Например, вы разыменовываете указатель p как в:
char c = * p
Вы объявляете это аналогичным образом:
char * p;
То же самое относится и к волосатым указателям на функции. Давайте объявим f как старый добрый «указатель на функцию, возвращающую указатель на int», а внешнее объявление просто смешно Это указатель на функцию, поэтому мы начнем с:
extern * f();
Возвращает указатель на int, поэтому где-то впереди есть
extern int * * f(); // XXX not quite yet
Теперь, какая правильная ассоциативность? Я никогда не могу вспомнить, поэтому используйте некоторые скобки.
extern (int *)(* f)();
Объявите, как вы это используете.