'typedef in C'有什么用?

What's the use of 'typedef in C'?

一个头文件有3个版本。

版本 1:

typedef struct node
{
    void* dataPtr;
    struct node* link;
} NODE;

版本 2:没有旧类型名称 'node' (typedef oldTypeName newTypeName)

typedef struct
{
    void* dataPtr;
    struct* link;
} NODE;

版本 3:没有 typedef

struct
{
    void* dataPtr;
    struct* link;
} NODE;

根据C : typedef struct name {...}; VS typedef struct{...} name;, 版本 1 的定义 'node' 是多余的,我将其更改为版本 2 并且工作正常。

再次根据此答案,当不使用 'typedef' 时,不能重复使用 'NODE'。

但是,使用这个版本 3 头文件的代码工作得很好。 (NODE被用了两次三次。)

这是代码:

/* Create a list with two linked nodes.*/
#include <stdio.h>
#include <stdlib.h>
#include "version3.h"                      //Header file

int main (void)
{
//Local Definitions
    int* newData;
    int* nodeData;
    NODE* node;

// Statements
    newData = (int*)malloc (sizeof (int));
    *newData = 7;
    node = createNode(newData);

    newData = (int*)malloc (sizeof (int));
    *newData = 75;
    node->link = createNode(newData);

    nodeData = (int*)node->dataPtr;
    printf ("Data from node 1: %d\n", *nodeData);

    nodeData = (int*)node->link->dataPtr;
    printf ("Data from node 2: %d\n", *nodeData);
    return 0;
}       //main

在这种情况下 'typedef' 有什么用? (这里假设我重用了NODE。->如果这个假设不成立,请告诉我为什么。我对C语言不熟悉。)

以下代码不会创建类型。它创建了一个名为 NODE 的对象,该对象的类型为匿名结构。

struct {
    void* dataPtr;
    void* link;
} NODE;

int main() {
}

我很难相信你问题中的代码可以编译。

typedef 用于给一个类型起一个新的名字。当使用 struct 的第三个版本时,它只是声明类型 struct{ void* dataPtr; struct* link;}NODE。现在,如果您必须声明另一个与 NODE 相同类型的变量,您会怎么做?只有一个选项,您必须将其与 NODE 一起声明,否则它们不兼容。
如果两个结构同时声明或使用结构标记或相同类型名称(使用 typedef)声明,则两个结构是兼容的。