c - 使用 'typedef' 的正确方法是什么?

标签 c typedef

<分区>

我是先这样写代码的

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

因为我了解到我可以编写 struct 而无需像这样在 struct 旁边编写 Node (如果我使用 typedef)

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

但是如果我在没有 Node 的情况下编写,稍后当我使用 Node *cur = head->next 之类的代码时会出现警告

警告标志是:

'warning: incompatible pointer types initializing 'Node *' with an expression of type 'struct Node *''

(仅供引用,我使用 mac os 和 visual studio 代码)

我知道如何解决这个问题,但我不知道为什么之前的代码在某些编译器中有效,而在其他一些编译器中却无效。

定义struct 的最佳方式是什么?是否推荐使用 typedef

最佳答案

在结构定义中,结构名称 (struct Node) 可见,但类型定义 (Node) 不可见。您的第一个示例没有为您正在定义的结构提供任何名称,只有一个给 typedef,因此结构定义中 next 字段的声明是前向声明一个名为的新结构struct Node,它不同于您声明的类型定义为 Node 的匿名结构。

关于c - 使用 'typedef' 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66003580/

相关文章:

c - 类型 fatal error : gtk/gtk. h: Eclipse (Oxygen) 编译期间没有此类文件或目录

c - 解析命令行参数时出现段错误

我们可以使用 typedef struct node 节点吗?

c++ - 使用 typedef 时可以重命名成员吗?

c - 文件路径数组中只有一个元素有效 - C

c - 为什么条件为假时无法退出for循环?

c - 电脑是怎么算的?

c++ - 结构和指针 C++

c++ - 在派生类中重新定义 typedef?

objective-c - ObjC 中的 #typedef 和 KVC