In C, static is opposed to extern.
- static gives the variable internal linkage, hiding it from other translation units. However, variables with internal linkage can be defined in multiple translation units.
- extern gives the variable external linkage, making it visible to other translation units. Typically this means that the variable must only be defined in one translation unit.
For some reason, static has different meanings in in different contexts.
- When specified on a function declaration, it makes the function local to the file. Remember, functions are exten by default.
- Static global variables are static variable defined outside of any function. Like static functions, static global variable are defined in the file and accessible to the file only. Global variables are defined in the file and accessible to all the other files through the extern keyword.
- When specified with a variable inside a function, it allows the variable to retain its value between calls to the function.