繁体   English   中英

如何在头文件中引用typedef?

[英]How do I refer to a typedef in a header file?

我有一个源文件,其中定义了一个typedef结构:

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

在此模块中,有一些函数在Node上运行,并将Node作为返回类型。 我应该在这个typedef的头文件中写什么?

写作是正确的

typedef *Node;

在标题?

您可以使用:

typedef struct node * Node;

但我建议不要将指针隐藏在类型声明中。 在变量声明中提供该信息更具信息性。

的module.c:

#include "module.h"
struct node {
    char *key;
    char *value;
    struct node *next;
};

module.h中:

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 *创建别名Node ,只需声明一个节点指针并将其命名为Node

struct node *Node;

现在预先添加一个typedef关键字:

typedef struct node *Node;

通常,要为类型创建别名,只需声明一个与您希望的别名同名的该类型的变量,然后添加一个typedef关键字。 甚至复杂的typedef声明也可以像这样轻松接近。

所以, typedef *Node; 是无效的,就像写j; 没有实际指定其类型。

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

typedef struct node *Node_ptr;

并将其保留在源文件中:

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

请注意,我创建了别名Node_ptr ,而不是Node 这是一个很好的做法,传达Node_ptr是一个指针的想法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM