2012-11-03 75 views
0

我對下面的結構定義感到困惑。不應該都是正確的?使用Borland C編譯,但只有第二個編譯時使用gcc。錯誤是「未知類型名稱_Node」。gcc vs Borland中的struct關鍵字C

typedef struct _Node { 
    int item; 
    _Node* next; 
} Node; 


typedef struct _Node { 
    int item; 
    struct _Node* next; 
} Node; 
+0

很可能BORLANDC錯誤地假定C++類語義(其中一個結構定義意味着一個typedef,因此不需要struct關鍵字) – wildplasser

+0

gcc是錯誤的,因爲結構變量必須具有'struct'關鍵字(除非你在定義之前已經定義了typedef)。 Borland編譯器在很多情況下都有很多bug,並且不符合C標準。 –

+0

你說得對。我的錯誤是,當我在BORLANDC編碼時,我使用了一個CPP文件(在打開BORLANDC時默認)。這很混亂。感謝您的重播! – EmbeddedDev

回答

0

這取決於編譯器如何處理前向引用。 gcc編譯器可以這樣做,默認情況下,因爲它也是一個C++編譯器。

+0

根據源文件的名稱,gcc充當C編譯器*或*作爲C++編譯器('.c'爲C ,'.cpp'和其他一些是C++)。 –

0

不,在C中只有第二個(明確包括struct說明符)是正確的。雖然C++允許省略struct,但c沒有,所以這是一個不可移植的Borland擴展。如果你用g ++編譯,我想它也應該接受第一個語法。