如果有一種方法來寫這個代碼與typedef的結構?C列表:處理typedef
struct s_parola{
char info[40];
struct s_parola *next;
};
我試着用這個代碼,但它是不正確的:
typedef struct {
char info[40];
t_parola *next;
} t_parola;
謝謝
如果有一種方法來寫這個代碼與typedef的結構?C列表:處理typedef
struct s_parola{
char info[40];
struct s_parola *next;
};
我試着用這個代碼,但它是不正確的:
typedef struct {
char info[40];
t_parola *next;
} t_parola;
謝謝
如果您的問題是您的結構中收到「未知類型s_parola」,那是因爲您正在嘗試在定義之前使用typedef。你可以改爲:
typedef struct s_parola s_parola;
struct s_parola {
char info[40];
s_parola *next;
};
這是最適合我:
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%好只是不舒服,但我不舒服。我真的很好奇,如果這是符合標準。如果是這樣,這是比我更好的解決方案。 如果有人能回答會很好。
在結構體定義之前放置typedef允許我在結構體定義中使用typedef。不過,不知道這是否是特定於實現的。 –
我相信標準的§6.2.3處理這個問題: 如果一個特定標識符的多個聲明在一個 翻譯單元中的任何一點都是可見的,那麼這個語法上下文就可以區分引用不同實體的用法。因此,對於各種類別的標識符存在單獨的名稱空間,如下所示: - 標籤名稱(由標籤聲明和使用的語法消除歧義); - 關鍵字struct,union或enum的結構體,聯合體和枚舉標記(通過以下任何32消歧) ; –
這並不是說如果你嘗試在C++編譯器中編譯它,這不會中斷,儘管 –