我有一个头文件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);
最佳答案
您可以使用指向不透明结构的指针来隐藏结构 List
和 Node
的内容。在 header 中,仅使用包含不透明声明
typedef struct ListNode Node;
typedef struct List List;
和函数声明。这些告诉编译器结构和 typedef 存在,但不告诉编译器结构包含什么。
在 list.c
中,包含完整的声明,但不作为 typedef,因为头文件已经告诉编译器有关 typedef 的名称。
struct ListNode {
/* contents */
};
struct List {
/* contents */
};
这样,结构体的内容在其他 C 文件中不可用,但 list.c
中的函数仍然可以使用它们。这也意味着其他 C 文件无法创建这些结构的新实例,除非使用 list.h
中提供的函数。
关于c - 如何从 typedef 生成静态结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57077394/