我在嵌入式系統上工作,我需要實現一個鏈表。C中的鏈接列表節點,結構原型
所以我用一個結構來構建一個節點
typedef struct A
{
... //some data
struct A *next;
struct A *prev;
} A;
我想在PC上(GCC)這工作正常。但是,嵌入式系統編譯器抱怨「標識符A未聲明」...
這是什麼最佳解決方案?
我在嵌入式系統上工作,我需要實現一個鏈表。C中的鏈接列表節點,結構原型
所以我用一個結構來構建一個節點
typedef struct A
{
... //some data
struct A *next;
struct A *prev;
} A;
我想在PC上(GCC)這工作正常。但是,嵌入式系統編譯器抱怨「標識符A未聲明」...
這是什麼最佳解決方案?
你應該添加一個單獨的向前聲明struct的:
struct A;
typedef struct A
{
... //some data
struct A *next;
struct A *prev;
} A;
一些編譯器做把你定義你貼的方式,但我見過需要單獨向前聲明的較早的編譯器。這可能與較舊的標準或不完整的標準實施有關。事實上,在我們需要編寫在不同編譯器的五個平臺上運行的代碼的項目中,我們將其作爲公司範圍內的編碼標準要求,以將前向聲明與結構的typedef分開。
非常感謝你!它的工作原理正是我在 – 2012-04-20 03:46:17
您可以分割出來:
typedef struct A A;
struct A {
... //some data
struct A *next;
struct A *prev;
};
非常感謝!這正是我所追求的! – 2012-04-20 03:45:08
原代碼應該編譯得很好。您可能正在使用非標準的編譯器。作爲其他建議的替代方案,您可以嘗試下列代碼:
typedef struct a
{
... //some data
struct a *next;
struct a *prev;
} A;
這樣,您不應該需要前向聲明。
之後哦,順便說一句,如果你在C++編譯器中編譯原始代碼,它將無法工作。 C++處理與C不同的struct命名空間 – Lundin 2012-04-20 09:21:20
出於好奇,您使用的是嵌入式編譯器嗎? – Lundin 2012-04-20 09:13:36