typedef struct <struct_name> 与简单的 typedef struct

问题描述 投票:0回答:2
typedef struct Node{
    int data;
    struct Node *next;
}Node;
typedef struct{
    int data;
    Node *next;
}Node;

这两者之间有什么区别,即

struct Node <name>
Node <name>
之间有什么区别? 使用第二个会出错。

我对 C 有点陌生,我见过当需要在结构定义中定义相同的结构时使用第一个结构。它实际上定义了相同的结构还是定义了不同的结构?

c struct declaration typedef
2个回答
0
投票

在此声明中

typedef struct{
    int data;
    Node *next;
}Node;

使用 typedef 名称

Node
声明了一个未命名的结构,并且在结构声明中使用了未声明的名称
Node
。所以编译器应该为这条记录发出一条消息

    Node *next;

此记录中的名称

Node
未定义。

这种未命名结构的 typedef 声明的问题是您无法在其声明中引用该结构本身。


0
投票

在C语言中,标识符在使用前需要声明。在您的第一个片段中,

struct Node
单独将
Node
声明为
struct
。由于类型已经声明,因此可以以有限的方式使用它,包括声明指向该类型的指针的成员。结构体的定义在分号处完成。在第二个片段中,声明了一个未命名的结构,并且在使用
Node
时,没有先前的声明,因此编译器无法弄清楚标识符
Node
指的是什么,因此它不能以如下方式使用显示在您的片段中。

© www.soinside.com 2019 - 2024. All rights reserved.