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

前端 未结 2 583
面向向阳花
面向向阳花 2021-02-15 10:34

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, 1         


        
2条回答
  •  醉酒成梦
    2021-02-15 11:32

    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

提交回复
热议问题