The way the names of objects and functions are shared between translation units is called “linkage.” These names can have:
The same name in another translation unit may refer to a different object or a different class. Names with internal linkage are sometimes referred to as being “local” to their translation units.
An example declaration of a name with internal linkage is:
static int i; // The static keyword ensures internal linkage.
The same name in another translation unit is guaranteed to refer to the same object or class. Names with external linkage are sometimes referred to as being “global.”
An example declaration of a name with external linkage is:
extern int i;