A function definition may have its old form (and say nothing about arguments on calls), or it may be introduced by a prototype (which affects argument checking and coercion on subsequent calls). (See also §3.1.2.2.)
To avoid a nasty ambiguity,
the Standard bans the use of typedef
names as formal parameters.