File/global scope
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. 