gcc与Borland C中的struct关键字

gcc与Borland C中的struct关键字,gcc,struct,Gcc,Struct,我对下面的结构定义感到困惑。不应该两者都正确吗?对于Borland C,这两种语言都可以编译,但是对于gcc,只有第二种语言可以编译。错误为“未知类型名称\u节点” 这取决于编译器如何处理正向引用。GCC编译器可以默认地执行这一操作,因为它也是C++编译器。p> 否,在C中,只有第二个(明确包括struct说明符)是正确的。虽然C++允许省略结构> /COD>,C没有,因此这是一个不可移植的Borland扩展。如果你用G++编译,我想它也应该接受第一个语法。很好地,Borland错误地假设C++

我对下面的结构定义感到困惑。不应该两者都正确吗?对于Borland C,这两种语言都可以编译,但是对于gcc,只有第二种语言可以编译。错误为“未知类型名称<代码>\u节点”


这取决于编译器如何处理正向引用。GCC编译器可以默认地执行这一操作,因为它也是C++编译器。p> 否,在C中,只有第二个(明确包括
struct
说明符)是正确的。虽然C++允许省略<代码>结构> /COD>,C没有,因此这是一个不可移植的Borland扩展。如果你用G++编译,我想它也应该接受第一个语法。

很好地,Borland错误地假设C++类语义(其中一个结构定义包含一个TyPulf,这样就不需要Strut关键字)GCC在给出错误时是正确的,因为结构变量必须有<代码> Stutt关键字。(除非您在定义之前键入了def)。Borland编译器有许多错误,在许多情况下不符合C标准。您是对的。我的错误是,当我在BORLANDC中编码时,我使用了一个CPP文件(默认情况下,在打开BORLANDC时)。非常混乱。感谢您的重播!以下划线开头的标识符是保留的;您不应该在自己的代码中使用它们。结构标记和类型定义不需要使用不同的标识符;这:
typedef struct Node{int item;struct Node*next;}节点;完全合法,允许您将该类型称为“代码>节点< /COD>”或“<代码>结构节点< /代码>。(个人而言,我更喜欢省略TyEndof并引用类型为“代码>结构节点”)< /Cord> GCC作为C编译器或C++编译器,这取决于源文件的名称。(
.c
是c,
.cpp
和其他一些是c++)。
typedef struct _Node {
    int item;
    _Node* next;
} Node;


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