2012-04-20 66 views
4

我在嵌入式系統上工作,我需要實現一個鏈表。C中的鏈接列表節點,結構原型

所以我用一個結構來構建一個節點

typedef struct A 
{ 
    ... //some data 
    struct A *next; 
    struct A *prev; 
} A; 

我想在PC上(GCC)這工作正常。但是,嵌入式系統編譯器抱怨「標識符A未聲明」...

這是什麼最佳解決方案?

+1

出於好奇,您使用的是嵌入式編譯器嗎? – Lundin 2012-04-20 09:13:36

回答

10

你應該添加一個單獨的向前聲明struct的

struct A; 
typedef struct A 
{ 
    ... //some data 
    struct A *next; 
    struct A *prev; 
} A; 

一些編譯器做把你定義你貼的方式,但我見過需要單獨向前聲明的較早的編譯器。這可能與較舊的標準或不完整的標準實施有關。事實上,在我們需要編寫在不同編譯器的五個平臺上運行的代碼的項目中,我們將其作爲公司範圍內的編碼標準要求,以將前向聲明與結構的typedef分開。

+0

非常感謝你!它的工作原理正是我在 – 2012-04-20 03:46:17

1

您可以分割出來:

typedef struct A A; 

struct A { 
    ... //some data 
    struct A *next; 
    struct A *prev; 
}; 
+0

非常感謝!這正是我所追求的! – 2012-04-20 03:45:08

0

原代碼應該編譯得很好。您可能正在使用非標準的編譯器。作爲其他建議的替代方案,您可以嘗試下列代碼:

typedef struct a 
{ 
    ... //some data 
    struct a *next; 
    struct a *prev; 
} A; 

這樣,您不應該需要前向聲明。

+0

之後哦,順便說一句,如果你在C++編譯器中編譯原始代碼,它將無法工作。 C++處理與C不同的struct命名空間 – Lundin 2012-04-20 09:21:20