Static vs global
If I have a C file like below, what is the difference between i
and j
?
#include <stdio.h>
#include <stdlib.h>
static int i;
int j;
int main ()
{
//Some implementation
}
i
has internal linkage so you can't use the name i
in other source files (strictly translation units) to refer to the same object.
j
has external linkage so you can use j
to refer to this object if you declare it extern
in another translation unit.
i
is not visible outside the module; j
is globally accessible.
That is, another module, which is linked to it, can do
extern int j;
and then be able to read and write the value in j
. The same other module cannot access i
, but could declare its own instance of it, even a global one—which is not visible to the first module.