Function pointer declarations is also a fun one, specially in a function declaration as return value and parameters.
Re:Writing a C Compiler, Part 1
by userbinator on Friday December 01, 2017 @06:58AM
(#15823313)
Typedefs are a little trickier to handle (particularly the "when do they actually take effect" part), but "the `a * b` ambiguity" is not hard, because if 'a' is a typedef or qualifier/specifier or basically anything that a declaration can start with, it's a declaration.
C++, on the other hand, is definitely far harder to parse, especially if you include things like templates.
All of these design warts of C show up clearly when attempting to write a compiler and are not very obvious to most users of the language.