None of the above are defined by a user but by an implementation - and
that is known as an properitary extension that is not on topic to clc.
Er, no.
From the perspective of both the language definition and a particular C
implementation, it makes no difference whether a type or function is
declared in a source file which was written by the author of the file
which references it, or a source file written by a co-worker, or a binary
library and headers supplied by a third party (which may or may not be the
same third party which supplied the compiler).
There's "same translation unit" and "different translation unit". The
C language doesn't recognise any further subdivisions.