无法用指针数组编译C89

Can't compile C89 with array of pointers

我正在尝试编译我的 C89 代码,其中包含一个指向各种其他数组中的位置的指针数组。我不断得到 ERROR (207) Aggregate or union objects may be initialized with constant expressions only,可能是因为我在初始化时如何定义它,但我真的没有更好的方法来做到这一点,除了一次定义一个索引,我宁愿避免这种情况。我已经尝试了所有我能想到的方法,有什么办法可以一次定义一行吗?

uint8_t * keyPtrs[] = {
    towers,
    towers,
    *(towers + 1),
    *(towers + 1),
    *(towers + 2),
    *(towers + 2),
    allianceStack
};

在 C89 中,数组的初始值设定项必须在编译时可计算。 See here 以获得更详细的定义。

在语言标准的更高版本中,对于自动数组放宽了这一要求(但对于静态数组仍然存在)。

您将不得不使用赋值语句或其他方式来填充直到运行时才知道的值。

如果数组应该识别静态数组中的元素 towers,正确的语法应该是:

uint8_t * keyPtrs[] = {
    towers,
    towers,
    towers + 1,
    towers + 1,
    towers + 2,
    towers + 2,
    allianceStack
};

如果 towersallianceStack 都是具有静态持续时间的数组对象,则此类数组中使用的地址应该是静态可计算的。一些针对晦涩链接器的编译器可能无法支持 (ptrConst+intConst) 表达式的静态计算,但您的问题几乎可以肯定是星号不正确。