A
static
global variable is local to the translation unit it is defined in. So, if you define static int a;
in two different translation units, this will create two independent variables. If you define a non-static global variable int b;
in two translation units, you will experience a linker error (but you can use extern int b;
in one of the two translation units to tell the linker that it should use the global variable from the other translation unit).A source file toghether with all the headers and source files included via the preprocessing directive #include less any source line skipped by any of the conditional inclusion preprocessing directives is called a translation unit.
A "translation unit" is a source file plus any headers or other source files it #includes, plus any files that THEY include, and so on. A source file is just that...one source file.
A translation unit is the basic unit of compilation in C++. It contains:
- all the contents of a single source file after the preprocessor has run its course
- the contents of any header files directly or indirectly included by it
- minus any lines ignored using conditional preprocessing statements
A single translation unit gets compiled into an object file, library, or executable program.
A source file, by contrast, is a stand-alone file, just like any other file on your file system. Once compiled, it can be a component of a translation unit as mentioned above.