Can someone explain when you\'re supposed to use the static keyword before global variables or constants defined in header files?
For example, lets say I have a head
Always use static in .c
files unless you need to reference the object from a different .c
module.
Never use static in .h
files, because you will create a different object every time it is included.
static
before a global variable means that this variable is not accessible from outside the compilation module where it is defined.
E.g. imagine that you want to access a variable in another module:
foo.c
int var; // a global variable that can be accessed from another module
// static int var; means that var is local to the module only.
...
bar.c
extern int var; // use the variable in foo.c
...
Now if you declare var
to be static you can't access it from anywhere but the module where foo.c
is compiled into.
Note, that a module is the current source file, plus all included files. i.e. you have to compile those files separately, then link them together.