1 / An identifier declared in different areas or in the same area more than once may be used to refer to the same object or function to a process called binding. There are three types of communication: external, internal and not one.
2 / In the set of translation units and libraries that make up the entire program, each declaration of a specific identifier with external communication indicates the same object or function. Within a single translation unit, each identifier declaration with an internal link identifies the same object or function. Each id declaration without a reference identifies a unique object.
3 / If the declaration of the file area identifier for an object or function contains a static storage class specifier, the identifier has an internal binding.
4 / For an identifier declared using the extern storage class specifier in the scope in which a preliminary declaration of this identifier is visible, if the previous declaration indicates an internal or external link, the identifier link with the subsequent declaration is the same as the link specified in the previous declaration. If no preliminary announcement is displayed or if no binding is specified in the previous announcement, then the identifier has an external binding.
5 / If the identifier declaration for the function does not have a storage class specifier, its binding is defined exactly as if it were declared using the extern storage class specifier. If an identifier declaration for an object has a file scope and a storage class specifier, its relationship is external.
6 / The following identifiers are not bound: an identifier declared as something other than an object or function; identifier declared as a function parameter; block area identifier for an object declared without an extern storage class specifier.
7 / If the same identifier with internal and external relationships appears inside the translation unit, the behavior is undefined.