2014-01-11 48 views
1

如果有一種方法來寫這個代碼與typedef的結構?C列表:處理typedef

struct s_parola{ 
    char info[40]; 
    struct s_parola *next; 
}; 

我試着用這個代碼,但它是不正確的:

typedef struct { 
    char info[40]; 
    t_parola *next; 
} t_parola; 

謝謝

回答

2

如果您的問題是您的結構中收到「未知類型s_parola」,那是因爲您正在嘗試在定義之前使用typedef。你可以改爲:

typedef struct s_parola s_parola; 

struct s_parola { 
    char info[40]; 
    s_parola *next; 
}; 
0

這是最適合我:

struct _s_parola { 
    char info[40]; 
    struct _s_parola *next; 
}; 

typedef struct _s_parola s_parola; 

int main() { 
    s_parola p; 
} 

對於使用s_parola作爲s_parola中的一種類型,您需要使用struct。但是,通過這種方式,您可以在程序中的任何其他地方使用s_parola而不是struct

編輯 @JamesReed的回答也工作,我用

typedef struct s_parola s_parola; 

可能是100%好只是不舒服,但我不舒服。我真的很好奇,如果這是符合標準。如果是這樣,這是比我更好的解決方案。 如果有人能回答會很好。

+0

在結構體定義之前放置typedef允許我在結構體定義中使用typedef。不過,不知道這是否是特定於實現的。 –

+0

我相信標準的§6.2.3處理這個問題: 如果一個特定標識符的多個聲明在一個 翻譯單元中的任何一點都是可見的,那麼這個語法上下文就可以區分引用不同實體的用法。因此,對於各種類別的標識符存在單獨的名稱空間,如下所示: - 標籤名稱(由標籤聲明和使用的語法消除歧義); - 關鍵字struct,union或enum的結構體,聯合體和枚舉標記(通過以下任何32消歧) ; –

+0

這並不是說如果你嘗試在C++編譯器中編譯它,這不會中斷,儘管 –