A name has file
scope if the identifier's declaration appears outside of any block.
A name with file scope and internal linkage is visible from the point
where it is declared to the end of the translation unit.
Global scope or global namespace
scope is the outermost namespace scope of a program, in which
objects, functions, types and templates can be defined. A name has global
namespace scope if the identifier's declaration appears outside
of all blocks, namespaces, and classes.
A name with global namespace scope and internal linkage is visible from the point where it is declared to the end of the translation unit.
A name with global (namespace) scope is also accessible for the initialization of global variables. If that name is declared extern, it is also visible at link time in all object files being linked.
A
user-defined namespace can be nested within the global scope using
namespace definitions, and each user-defined namespace is a different
scope, distinct from the global scope. 