An object may be declared auto
only within a function.
It has block scope and the defined object has automatic storage duration.
A register declaration is equivalent
to an auto declaration.
It also advises the compiler that the
object will be accessed frequently.
static gives a declared object static storage duration.
For more information see
The object may be defined inside or outside functions.
An identifier declared static with file scope has
A function may be declared or defined with static.
If a function is defined to be static,
the function has internal linkage.
A function may be declared with static
at block scope;
the function should be defined with static
extern gives a declared object static storage duration.
An object or function declared with extern has the same
linkage as any visible declaration of the identifier at file scope.
If no file scope declaration is visible
the identifier has external linkage.
Using typedef as a storage class specifier
does not reserve storage.
Instead, typedef defines an
identifier that names a type.
See the section on derived types for a discussion of typedef.