我对以下内容感到好奇。我在头文件中声明了一个简单的 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
删除它们?
简短的答案是:您在标头中定义一个数组,而不仅仅是声明它。不是很好。如果您需要在包含标头时访问数组,则标头中应该有一个声明,如下所示:
extern int userCardsIndexes[INITIAL_CARDS_NUMBER];
然后,仅在一个源文件中,按如下方式定义数组:
int userCardsIndexes[INITIAL_CARDS_NUMBER] = {0, 1, 8, 9, 16, 17};
至于长答案:头文件没有什么“神奇”之处;这#include
指令基本上只是将头文件的全部内容复制到源文件中。所以本质上,你得到的是一个新的静态数组userCardsIndexes
在每个源文件中定义;如果未使用此数组,您将收到“未使用的变量”警告。前置const
很可能会抑制警告,只是因为编译器未配置为警告const
未使用的变量。例如:使用GCC,查看“-Wunused-variable”的文档:
http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)