2011-07-18 62 views
2
int main() 
{ 
    // forward declaration 
    struct myStruct_st *mS; // Note that this will expand as "struct struct myStruct_st *mS which does not make any sense to me" 

    return 0; 
} 

// definition of myStruct_s 
typedef struct myStruct_s 
{ 
    int x; 
    int y; 
} myStruct_st; 

我明白myStruct_s是需要前向聲明的結構。我的代碼中似乎有編譯錯誤。我想知道如何。有人知道嗎?有誰知道爲什麼這個編譯成功?

+0

這只是一個方面的評論,但我通常把'typedef's和這樣的_before_'main()'(當我沒有將它們包含在頭文件中時,就是這樣)。 – JAB

回答

4

本地結構有無關結構定義在main()之外。在main()你(forward-)聲明一個結構體,定義一個指向該結構體的指針並永遠不定義該結構體。這非常好。恰巧你在main()之外定義了一個具有相同名稱的結構。

0

我想你誤解了typedef是如何工作的 - 它不是宏觀替代。

尤其是typedef後使用struct myStruct_s同爲「struct struct myStruct_s」 - 它只是struct myStruct_s,因爲它讀取在臉上。 typedef引入了一個可以使用的令牌而不是struct ...,但它不像宏一樣擴展,並且不會「消除」仍然可以使用的struct ...聲明。

+1

我明白。我的問題是struct myStruct_st * mS是如何工作的?請注意,myStruct_st是struct myStruct_s的typedef。我相信阿門已經回答了這個問題。 – Jingo

相關問題