2012-06-28 40 views
0

爲什麼我在這段代碼中出現錯誤?即使我沒有鏈接但只編譯它仍會給出一個錯誤。爲什麼編譯器不考慮它存在於另一個文件中的可能性? 任何人都可以解釋編譯器如何處理typedef語句。typedef在C中的行爲

在此先感謝

typedef struct p* q; 

    int main() 
    { 
    struct p{ 
     int x; 
     char y; 
     q ptr; 
     }; 
     struct p p={1,2,&p}; 
     printf("%d\n",p.ptr->ptr->x); 
     return 0; 
    } 

PS:取消引用不完全類型是錯誤我在gcc中獲得。

+1

你介意分享你得到的錯誤嗎? –

+0

你應該指定錯誤是什麼,以便人們最好地理解發生了什麼。 –

+2

'main'內部的'struct p'和外部是不同的! –

回答

2

main之外的「struct p」和main之內的「struct p」是不同的類型,因爲它們是在不同的作用域中定義的。如果你把兩個聲明都放在main之外或者都放在main之內,編譯器會接受它。

當你在一個函數裏面定義一些東西時,你會說:「這是我在這個函數中使用的定義;它不適用於任何功能外。「