c - 'typedef in C' 有什么用?

标签 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。->如果这个假设不成立,请告诉我原因。我对C语言不熟悉。)

最佳答案

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

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

int main() {
}

我很难相信你问题中的代码能够编译。

关于c - 'typedef in C' 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29057401/

相关文章:

c - 静态断言 enum 是某种基础类型

c - 在 Arduino 中使用类似类的结构

ios - 协议(protocol)类型 'Any' 的值不能符合 'Equatable' ;只有结构/枚举/类类型可以符合协议(protocol)

c++ - 寻找一种重新初始化结构的简单方法

c - 我应该如何继续这段代码?本作业的第二部分应该使用什么关键字?

c - 如何通过空格 ""分隔符分割或标记字符串数组以查找每个字符串中的第二个单词

清理所有空格和换行符 C 或 Lex/Bison

c - C 是否提供运算符来检查类型的签名?

c++ - 在 Doxygen 中记录回调类型定义

c++ - 我需要 C++ 中的一个类型,它实际上是一个成员,而不是嵌套类型