When you talk about informing other readers, consider the compiler itself as a reader. If a variable is declared static
, that can affect the degree to which optimizations kick in.
Redefining a static
variable as extern
is impossible, but the compiler will (as usual) give you enough rope to hang yourself.
If I write static int foo;
in one file and int foo;
in another, they are considered different variables, despite having the same name and type – the compiler will not complain but you will probably get very confused later trying to read and/or debug the code. (If I write extern int foo;
in the second case, that will fail to link unless I declare a non-static int foo;
somewhere else.)
Global variables rarely appear in header files, but when they do they should be declared extern
. If not, depending on your compiler, you risk that every source file which includes that header will declare its own copy of the variable: at best this will cause a link failure (multiply-defined symbol) and at worst several confusing cases of overshadowing.