我在头文件中有以下静态数组:
static MyStruct_t MyStructArray[] = {
......
......
......
}
但是gcc发出警告:
warning: `MyStructArray' defined but not used
处理这种情况的正确方法是什么?
UPD:
将数组定义为const:
const MyStruct_t MyStructArray[] = {
......
修复了这种情况。那么标题中extern或const的首选方式是什么?
答案 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
(导致警告的原因)。