C 如何在头文件中引用typedef?
我有一个定义了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 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。我只是不想通过改变他/她的命名惯例来迷惑他/她。