A private file-level definition
static int cache; static void reset(void) { cache = 0; } The static declarations give cache and reset internal linkage: each identifier corresponds only within this translation unit. An object file elsewhere cannot use these declarations to refer to the same entities. section 13.2
TAKEAWAY: Linkage belongs to identifiers, not the objects they designate. Internal linkage keeps an identifier's correspondence within one translation unit, while external linkage allows declarations in different object files to designate the same entity through the linker. section 13.2
Keep these distinctions separate:
- static storage duration describes how long an object exists; the storage-class specifier static enforces internal linkage. section 13.2
- The static specifier can apply to a file-scope or block-scope variable, or to a function. section 13.2
- extern does not necessarily mean external linkage; it can refer to an identifier with internal linkage. section 13.2

