我有一个头文件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);
答案 0 :(得分:0)
您可以使用指向不透明结构的指针来隐藏结构List
和Node
的内容。在标题中,仅使用不透明声明
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文件无法创建这些结构的新实例。