我对以下内容感到好奇。我有一个在头文件中声明的简单 C 数组,如下所示:
static int userCardsIndexes[INITIAL_CARDS_NUMBER] = {0, 1, 8, 9, 16, 17};
它给了我一堆警告:
: 'userCardsIndexes' defined but not used
尽管我将这个文件包含到我的 cpp 文件中并使用了这个变量。我不明白的第二件事是当我像这样添加 const
说明符时:
static const int userCardsIndexes[INITIAL_CARDS_NUMBER] = {0, 1, 8, 9, 16, 17};
警告消失了!谁能给我解释为什么我会收到这些警告以及为什么 const
会删除它们?
最佳答案
简短的回答是:您在 header 中定义一个数组,而不仅仅是声明它。情况不妙。如果在包含 header 时需要数组可访问,则 header 中应该有这样的声明:
extern int userCardsIndexes[INITIAL_CARDS_NUMBER];
然后,仅在一个源文件中,这样定义数组:
int userCardsIndexes[INITIAL_CARDS_NUMBER] = {0, 1, 8, 9, 16, 17};
至于长答案:头文件没有什么“神奇”的地方; #include
指令基本上只是将头文件的全部内容复制到源文件中。所以本质上,你得到的是一个在每个源文件中定义的新静态数组 userCardsIndexes
;如果未使用此数组,则会收到“未使用的变量”警告。在 const
前面添加可能会抑制警告,因为编译器未配置为对 const
未使用的变量发出警告。例如:使用 GCC,查看“-Wunused-variable”的文档:
关于在 h 文件中声明的 c++ 静态数组给出警告 'defined but not used',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14546253/