Deklaracje wskaźników do funkcji można jeszcze bardziej skomplikować - np. funkcja, której argumentem jest wskaźnik do funkcji i zwraca wskaźnik do funkcji. Stają się one bardzo nieczytelne. Z pomocą przychodzi nam słowo kluczowe typedef
typedef służy do wprowadzania innej nazwy na istniejący już typ. Nowa nazwa musi być poprawnym identyfikatorem.
typedef unsigned long long ullong; ullong n=10;
W powyższym przykładzie zdefiniowaliśmy nowy typ o nazwie ullong. Od tej pory możemy używać tej nazwy na typ tak samo jak jej dłuższej wersji unsigned long long.
Analogicznie można zdefiniować typ wskaźnika do funkcji o określonej sygnaturze.
typedef bool (*WskaznikDoFuncji)(int,int); void funkcja(WskaznikDoFunkcji f) { ... bool r = f(a,b); } WskaznikDoFunkcji g(WskaznikDoFunkcji f) { ... bool r = f(a,b); return f; }