Please excuse me.
I misspelled "function scope" very badly,
when refering to this code:
Well of course functions cannot have function scope.
C89 3.1.2.1 Scope of Identifiers
An identifier is visible (i.e., can be used) only within a region
of program text called its cope. There are four kinds of scopes:
function, file, block, and function prototype. (A function prototype
is a declaration of a function that declares the types of its
parameters.)
A label name is the only kind of identifier that has function
scope. [...]
Every other identifier has scope determined by the placement of
its declaration (in a declarator or type specifier.) If the
declarator or type specifier that declares the identifier appears
outside of any block or list of parameters, the identifier has
file scope, which terminates at the end of the translation unit.
If the declarator or type specifiers that declares the identifier
appears inside a block or within the list of parameter declarations
in a function definition, the identifier has block scope, which
terminates at the } that closes the associated block. [...]