### Storage Class Specifiers

The storage class specifier used within the declaration determines whether:

- The object has internal, external, or no linkage.
- The object is to be stored in memory or in a register, if available.
- The object receives the default initial value `0` or an indeterminate default initial value.
- The object can be referenced throughout a program or only within the function, block, or source file where the variable is defined.
- The storage duration for the object is static (storage is maintained throughout program run time) or automatic (storage is maintained only during the execution of the block where the object is defined).

For a function, the storage class specifier determines the linkage of the function.

Declarations with the auto or register storage-class specifier result in automatic storage. Those with the extern or static storage-class specifier result in static storage.

Most local declarations that do not include the extern storage-class specifier allocate storage; however, function declarations and type declarations do not allocate storage.

The only storage-class specifiers allowed in a global or file scope declaration are static and extern.

Storage class specifier keywords are:

- auto
- extern
- register
- static
- typedef

auto
extern
register
static
typedef