c语言 - 无法使用指针数组编译 C89



我正在尝试编译我的 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 中,数组的初始值设定项在编译时必须是可计算的。有关更详细的定义,请参阅此处。

在更高版本的语言标准中,自动数组放宽了此要求(但静态数组仍保留)。

您必须使用赋值语句或其他方式来填充在运行时之前未知的值。

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

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

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

最新更新