Using the keyword extern with an initializer constitutes defining a variable. Using the keyword extern without initializer constitutes a declaration. If the keyword extern is omitted then, the the indentifier constitutes a definition. A typdef is local to a file. An enum declaration is local to a file.
Enumerations defined within a class are local to that class.
The scope identifier can be used to access an enumeration which is defined within a class. An anonymous union must have public data members. A file scope anonymous union has to be declared static. The keyword extern can be used within blocks and at file scope.