如何从typedef制作静态结构

时间:2019-07-17 13:44:56

标签: c struct static

我有一个头文件list.h和一个源文件list.c,它们定义了list.h中的功能。 我在这里有一个结构:

    typedef struct ListNode{
 struct ListNode* next;
 struct ListNode* prev;
 void *value;
    }Node;
    typedef struct List{
 Node *first;
 Node *last;
 int count;
    }List;

当编译器不接受同时使用static和typedef时,如何使它们仅对list.h中的函数可见?这些是我在list.h中声明的功能:

    List *List_create();
    void List_destroy(List *list);
    void *List_remove(List *list,Node *node);

1 个答案:

答案 0 :(得分:0)

您可以使用指向不透明结构的指针来隐藏结构ListNode的内容。在标题中,仅使用不透明声明

typedef struct ListNode Node;
typedef struct List List;

和函数声明。它们告诉编译器结构和typedef存在,但不包含结构。

list.c中,请包含完整的声明,但不包括typedef,因为标头文件已经告诉编译器有关typedef的名称。

struct ListNode {
    /* contents */
};
struct List {
    /* contents */
};

这样,结构的内容就无法在其他C文件中使用,但是list.c中的函数仍然可以使用它们。这也意味着,除非使用list.h中提供的功能,否则其他C文件无法创建这些结构的新实例。