I’m curious about the following. I have a simple C array declared in a header file like this:
static int userCardsIndexes[INITIAL_CARDS_NUMBER] = {0, 1, 8, 9, 16, 17};
it gives me a bunch of the warnings:
: 'userCardsIndexes' defined but not used
despite i include this file into my cpp files and use this variable. The second thing that i don’t understand about it is when i add const specifier like this:
static const int userCardsIndexes[INITIAL_CARDS_NUMBER] = {0, 1, 8, 9, 16, 17};
the warnings disappear! Can anyone give me an explanation why i get these warnings and why const removes them?
The short answer is: you’re defining an array in a header, not just declaring it. This is not good. If you need the array accessible whenever you include the header, there should be a declaration in the header as such:
And then, in only one source file, define the array as such:
As to the long answer: there’s nothing “magical” about a header file; the
#includedirective just basically copies the entire contents of the header file into your source file. So essentially, what you’re getting is a new static arrayuserCardsIndexesdefined in every source file; if this array isn’t used, you get the “unused variable” warning. Prepending theconstis likely suppressing the warning just because the compiler isn’t configured to warn onconstunused variables. For example: using GCC, look at the documentation for “-Wunused-variable”:http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html