A: auto: the default. Variables are created and initialized automatically while they are defined and destroyed at the ending of the block containing their definition. They are not observable outside that block.
register: it is a type of auto variable. a recommendation to the compiler to employ a CPU register for performance.
static: a variable which is known only in the function which contains its definition but is never destroyed & retains its value among calls to that function. This present from the time the program start execution.
extern: a static variable whose placement and definition is determined while all object and library modules are combined (linked) to form the executable code file. It may be visible outside the file where it is defined.