2012-11-03 37 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 ++编译,我想它也应该接受第一个语法。