【发布时间】:2016-08-29 15:18:26
【问题描述】:
static uint32_t a[20] = {0};
和
uint32_t a[20] = {0};
我在代码中都使用了它们
a[0] = 1;
等等……
当我创建变量 static 并使用它时,我得到一个错误
variable "a" was declared but never referenced
但是当我删除 static 时,一切正常。
在这两种情况下,数组a 都是一个全局数组。
错误在于 MACROS 。
数组声明已完成,它被某些平台使用,我没有看到错误。相同的代码提供错误,因为此声明/数组未在其他平台上使用。
我的错!!!!
static uint32_t a[20] = {0};
void func()
{
...............
#ifdef ABC
a[0] = 1;
#endif
................
}
现在在ABC平台上编译没有错误在一些非ABC平台上编译出现错误。
解决方案:将全局也包裹在相应的宏下
#ifdef ABC
static uint32_t a[20] = {0};
#endif
【问题讨论】:
-
static表示“此变量在单元/文件之外不能直接访问”,但我不明白您为什么会收到这样的错误 -
如果你得到一个变量被声明但从未引用的错误,你很可能声明了它但从未引用它。 (也许你引用了另一个同名的变量。)
-
@DavidSchwartz 是的,我想知道出了什么问题。我在我的代码中使用相同的数组。
-
我使用 gcc 或 llvm 编译了
static uint32_t a[20] = {0};的代码,既没有错误也没有警告。 -
@Gopi 它告诉你出了什么问题,你声明了一个变量但没有引用它。正如我所说,您可能引用了具有相同名称的不同变量。尝试删除它告诉你没有被引用的所有声明——如果你的代码仍然可以编译和链接,那就对了。
标签: c