Storage duration of external variables
All extern objects have static storage duration.
Memory is allocated for extern objects before the main function
begins running, and is freed when the program terminates. The scope
of the variable depends on the location of the declaration in the
program text. If the declaration appears within a block, the variable
has block scope; otherwise, it has file scope.