'typedef in C'有什么用?

时间:2015-03-15 05:00:38

标签: c struct typedef

头文件有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定义'节点'是多余的,我将其更改为版本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。 - &gt;如果这个假设不正确,请告诉我原因。我不熟悉C语言。)

2 个答案:

答案 0 :(得分:3)

以下代码创建类型。它创建了一个名为NODE的对象,它具有一个匿名结构,因为它的类型。

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

int main() {
}

我发现很难相信你问题中的代码会编译。

答案 1 :(得分:0)

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