0

下面的代码拒绝在 SDCC 中编译,因为我使用了灵活的数组成员("This line"s)。

/** 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 不喜欢这样。我可以在代码中引用可以干净编译的内存结构的另一种方法是什么?

4

2 回答 2

1

通常的方法是给数组成员一个大小:

typedef struct {
    int nLen;
    char str[1];
} STRLIST_ENTRY;

这让编译器很高兴。

编辑:您可以使用--std-c99--std-sdcc99开关让 SDCC 理解您的原始代码吗?

于 2013-03-18T22:17:28.050 回答
0
typedef struct {
    int nLen;
    char *str;                    
} STRLIST_ENTRY;

我会这样做,并在准备好使用它时 malloc 数组。您使用所有大写字母来定义结构名称是否有任何特殊原因?通常这些在大多数编码标准中都是小写的。

于 2013-03-18T23:23:17.523 回答