C 什么';这是使用';typedef';?
我是用这种方式写代码的C 什么';这是使用';typedef';?,c,typedef,C,Typedef,我是用这种方式写代码的 typedef struct { struct Node *next; int data; } Node; 因为我知道我可以写struct,而不用像这样在struct旁边写Node(如果我使用typedef) 但是,如果我不使用节点,那么当我使用像节点*cur=head->next这样的代码时,会出现警告 警告标志是: '警告:不兼容的指针类型正在使用'struct Node*'类型的表达式初始化'Node*'' (仅供参考,我使用mac os和
typedef struct
{
struct Node *next;
int data;
} Node;
因为我知道我可以写struct
,而不用像这样在struct
旁边写Node
(如果我使用typedef
)
但是,如果我不使用节点
,那么当我使用像节点*cur=head->next这样的代码时,会出现警告
警告标志是:
'警告:不兼容的指针类型正在使用'struct Node*'类型的表达式初始化'Node*''
(仅供参考,我使用mac os和visual studio代码)
我知道如何解决这个问题,但我不知道为什么在某些编译器中,以前的代码可以工作,而在某些编译器中,它不工作
定义结构的最佳方法是什么?是否建议使用typedef
?在结构定义中,结构(struct Node
)的名称可见,但typedef(节点
)不可见。第一个示例没有给正在定义的结构命名,只给typedef命名,因此结构定义中的next
字段的声明是向前声明一个名为struct Node
的新结构,这与您声明的类型定义为Node
的匿名结构不同,两者都将结构的typedef
创建为Node
,但在第一种情况下,结构本身没有标记,而在第二种情况下,它也有标记节点
。Stuct标记空间和typedef不冲突。在第二种情况下,可以使用Node
或struct Node
引用结构,在第一种情况下,只能将类型引用为Node
。要声明指针,必须先有一个类型。第二种情况相当于struct Node{struct Node*next;int data;};typedef结构节点
通过使用标记创建对struct Node
的前向引用,在第一种情况下,“某些编译器”的意思可能是“用于不同语言的某些编译器”typedef struct
不为struct Node*next提供任何信息代码>我不知道为什么在某些编译器中以前的代码是有效的。请告诉我们这些编译器是什么,以便我们可以尝试。我正在听一个多年前上传的讲座,老师使用的是Microsoft Visual Studio Community 2017 15.7.4版本。在他的演讲中,C语言的编译器可以很好地处理这些代码
typedef struct Node
{
struct Node *next;
int data;
} Node;