由于我使用了灵活的数组成员("This line"
),下面的代码拒绝在SDCC中进行编译。如何引用可变长度结构
/** header of string list */
typedef struct {
int nCount;
int nMemUsed;
int nMemAvail;
} STRLIST_HEADER;
/** string list entry data type */
typedef struct {
int nLen;
char str[]; // This line
} STRLIST_ENTRY;
/** string list data type */
typedef struct {
STRLIST_HEADER header;
STRLIST_ENTRY entry[]; // This line
} STRLIST;
int main()
{
return 0;
}
但是,要访问我的数据已经建立了这样的(我通过指针访问现有的内存,不砸堆栈),并使用结构指针非常干净的代码做。不幸的是SDCC不喜欢这样。什么是我可以引用我的代码中的内存结构的另一种方式,它会干净地编译?
根据标准,具有灵活数组成员的结构不得是数组结构或元素的成员。所以'STRLIST'无效。 – 2013-03-18 22:47:01
@DanielFischer我知道。重写这段代码的最好方法是什么,以便它符合标准? – thirtythreeforty 2013-03-18 22:48:01
好问题。你标记'char str [];'行让我怀疑SDCC根本不喜欢灵活的数组成员?在这种情况下,我看到的唯一选择是为数组设置一个固定的大小,或者使用指针(并放弃局部性)。如果它接受灵活的数组成员,但不是递归地,你可以在'STRLIST'中作弊并使用'unsigned entry [];'。虽然也不完全令人满意。 – 2013-03-18 23:14:07