由於我使用了靈活的數組成員("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