External and tentative definitions
At the top level of a translation unit (that is, a source file with all the #includes after the preprocessor), every C program is a sequence of declarations, which declare functions and objects with external or internal linkage. These declarations are known as external declarations because they appear outside of any function.
# Notes
Inline definitions in different translation units are not constrained by one definition rule. See inline for the details on the inline function definitions.
See storage duration and linkage for the meaning of the keyword extern with declarations at file scope
See definitions for the distinction between declarations and definitions.
Tentative definitions were invented to standardize various pre-C89 approaches to forward declaring identifiers with internal linkage.