无法用指针数组编译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
};
如果 towers
和 allianceStack
都是具有静态持续时间的数组对象,则此类数组中使用的地址应该是静态可计算的。一些针对晦涩链接器的编译器可能无法支持 (ptrConst+intConst)
表达式的静态计算,但您的问题几乎可以肯定是星号不正确。
我正在尝试编译我的 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
};
如果 towers
和 allianceStack
都是具有静态持续时间的数组对象,则此类数组中使用的地址应该是静态可计算的。一些针对晦涩链接器的编译器可能无法支持 (ptrConst+intConst)
表达式的静态计算,但您的问题几乎可以肯定是星号不正确。