定义全局数组

时间:2010-01-04 08:30:11

标签: c++ gcc

我在头文件中有以下静态数组:

static MyStruct_t MyStructArray[] = {
    ......
    ......
    ......     
}

但是gcc发出警告:

warning: `MyStructArray' defined but not used

处理这种情况的正确方法是什么?

UPD:

将数组定义为const:

const MyStruct_t MyStructArray[] = {
    ......

修复了这种情况。那么标题中extern或const的首选方式是什么?

4 个答案:

答案 0 :(得分:5)

因为你已经在头文件中声明了数组静态,所以每个编译单元(即预处理的.cpp文件)都会得到它自己的数组副本 - 几乎肯定不是你想要的,并且肯定是你获得了“已定义但未使用”错误。

相反,您可能希望在头文件中使用它:

extern MyStruct_t *MyStructArray;

...然后恰好是1 .cpp文件:

MyStruct_t MyStructArray[] = { ...};

答案 1 :(得分:1)

它发出警告,因为代码中未引用该数组。对数组进行注释,警告就会消失。

答案 2 :(得分:1)

如错误消息所示,数组已定义,但未使用。如果您不想使用它,那么......不要定义它!

此外,您希望它是静态的并且您在头文件中定义它看起来很奇怪。这些是相反的事情。

处理此问题的正确方法是在头文件中声明数组:

MyStruct_t MyStructArray[];

并在一个C文件(一个编译单元)中定义它。

MyStruct_t MyStructArray[] = {
    ......
    ......
    ......     
}

但请注意,你不能以这种方式静止它。

答案 3 :(得分:1)

如果这个数组是公开的,那么你很可能想要extern而不是static(导致警告的原因)。