C 如何在头文件中引用typedef?

C 如何在头文件中引用typedef?,c,header,typedef,C,Header,Typedef,我有一个定义了typedef结构的源文件: typedef struct node { char *key; char *value; struct node *next; } *Node; 在该模块中,有一些函数在节点上操作,并将节点作为返回类型。对于这个typedef,我应该在头文件中写什么 写得对吗 typedef *Node; 在标题中 您可以使用: typedef struct node * Node; 但我建议不要在类型声明中隐藏指针。在变量声明中包含这

我有一个定义了typedef结构的源文件:

typedef struct node {
    char *key;
    char *value;
    struct node *next;
} *Node;
在该模块中,有一些函数在节点上操作,并将节点作为返回类型。对于这个typedef,我应该在头文件中写什么

写得对吗

typedef *Node;
在标题中

您可以使用:

typedef struct node * Node;
但我建议不要在类型声明中隐藏指针。在变量声明中包含这些信息会提供更多信息

模块c:

#include "module.h"
struct node {
    char *key;
    char *value;
    struct node *next;
};
typedef struct node Node;
#include "module.h"
Node * myNode; // We don't need to know the whole type when declaring pointer
模块.h:

#include "module.h"
struct node {
    char *key;
    char *value;
    struct node *next;
};
typedef struct node Node;
#include "module.h"
Node * myNode; // We don't need to know the whole type when declaring pointer
指针某处的变量声明:

#include "module.h"
struct node {
    char *key;
    char *value;
    struct node *next;
};
typedef struct node Node;
#include "module.h"
Node * myNode; // We don't need to know the whole type when declaring pointer
宣言

typedef *Node;
这是无效的。它缺少类型。查看
typedef
的一个好方法是记住它只是一个存储类说明符,因此,它与任何其他声明一样工作。如果要为类型
结构节点*
创建别名
节点
,只需声明一个节点指针并将其命名为
节点

struct节点*node

现在在前面加上一个
typedef
关键字:

typedef结构节点*node

通常,要为类型创建别名,只需使用与所需别名相同的名称声明该类型的变量,然后在前面添加一个
typedef
关键字。即使是复杂的
typedef
声明也可以像这样轻松处理

所以,
typedef*节点
无效,就像只写
j而不实际指定其类型

现在,您不能两次
typedef
something。您必须将
typedef
struct节点
声明中取出并将其移动到头文件中,或者将整个
typedef
+结构声明移动到头文件中。前一种解决方案通常是您想要的,因为它允许您隐藏一些信息。因此,我的建议是将其写入头文件:

typedef struct node *Node_ptr;
并将其保存在源文件中:

struct node {
    char *key;
    char *value;
    struct node *next;
};

请注意,我创建了别名
节点_ptr
,而不是
节点
。这是一个很好的实践,传达了
Node\u ptr
是指针的思想。

为什么不在头文件本身中编写整个结构..并在源文件中使用
*Node
。或者
typedef struct Node并摆脱这些古怪的帽子。”@potatosatter-True。我只是不想通过改变他/她的命名惯例来迷惑他/她。