c++ static array declared in h file gives warning 'defined but not used'

c++, constants, header-files, static

Solution

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:

extern int userCardsIndexes[INITIAL_CARDS_NUMBER];

And then, in only one source file, define the array as such:

int userCardsIndexes[INITIAL_CARDS_NUMBER] = {0, 1, 8, 9, 16, 17};

As to the long answer: there's nothing "magical" about a header file; the `#include` directive just basically copies the entire contents of the header file into your source file. So essentially, what you're getting is a new static array `userCardsIndexes` defined in every source file; if this array isn't used, you get the "unused variable" warning. Prepending the `const` is likely suppressing the warning just because the compiler isn't configured to warn on `const` unused variables. For example: using GCC, look at the documentation for "-Wunused-variable":

http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

Problem

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?

Original source