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 header file with the line:
const float kGameSpriteWidth = 12.0f;
Should this have static
in front of const
or not? What are some best practices for using static
?
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:
Now if you declare
var
to be static you can't access it from anywhere but the module wherefoo.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.
static
renders variable local to the file which is generally a good thing, see for example this Wikipedia entry.Rule of thumb for header files:
extern int foo;
and put a corresponding intialization in a single source file to get a modifiable value shared across translation unitsstatic const int foo = 42;
to get a constant which can be inlinedThe static keyword is used in C to restrict the visibility of a function or variable to its translation unit. Translation unit is the ultimate input to a C compiler from which an object file is generated.
Check this: Linkage | Translation unit
Yes, use static
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.The correct mechanism for C++ in anonymous namespaces. If you want something that is local to your file, you should use an anonymous namespace rather than the static modifier.