In my program, I have a file called constants.h that declares the following matrix in a global scope (the matrix should be fully constant – if anyone sees a potential problem, let me know):
static unsigned char const MY_MATRIX[66][9] = {...};
In another file, let’s call it main.c, I can actually reference this constant:
doSomething(var1, count, MY_MATRIX[42], TRUE, FALSE, thing);
But then I just read the definition of the keyword static and it’s supposed to mean that the variable cannot be accessed outside the file it’s defined in. (In this case, the desired behavior is that it should be accessed, but then it seems the extern keyword is the one to use!)
So, can anyone tell me why this works? Why is the variable not invisible? Thanks!
This is because you are declaring a
staticvariable in a header: when you include the header in a C file, you get a brand-new definition independent of the other definitions. If you include the header in two files, you get two independent copies; if you include it in three C files, you get three independent copies, and so on. The copies do not conflict with each other, because thestaticdefinition hides them from the linker.A proper way to make use of a shared piece of data allocated in a static memory is to make the declaration
externin the header, and then add a non-static definition in exactly one C file.