c - 用 C 辅助结构封装

标签 c struct encapsulation

假设我正在编写一个链表,并且在我的头文件中有:

struct Node {
    LIST_TYPE value;
    Node* next;
    Node* prev;
};

struct List{
    int size;
    Node* head;
    Node* tail;
    void (*list_print_function)(void*);
};

但是我不希望客户端能够看到Node结构。 static 修饰符是执行此操作的正确方法吗?关于静态结构的文档不多。

最佳答案

你想要的是一个不透明结构,你可以通过在你的头文件中声明struct来做到这一点,这被称为前向声明但只在实现文件中定义它,就像你给出函数原型(prototype)但不给出定义一样。

然后您可以提供访问器函数以允许库用户使用struct,一个示例

data-type.h

struct Struct;

void struct_set_value(struct Struct *struct, int value);
int struct_get_value(const struct Struct *const instance);

data-type.c

struct Struct
 {
    int value;
 };

void struct_set_value(struct Struct *instance, int value)
 {
    instance->value = value;    
 }

int struct_get_value(const struct Struct *const instance)
 {
    return instance->value;
 }

然后,您可以向库用户和编译对象提供 .h 文件,以便他们可以链接到它。

关于c - 用 C 辅助结构封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30039888/

相关文章:

java - 数据隐藏就是封装,但并不是所有的封装都是数据隐藏

javascript - 如何为开发人员构建框架

iphone - 如何正确定义结构

c# - 为什么我必须使用非默认构造函数初始化 C# 结构中的所有字段?

c - 为linux编写的一个C函数没有返回值,c编译器如何处理这个问题?

c - 从函数返回 "char pointer"时是否有任何问题

C++数组结构

javascript - 如果包含一个变量,并且一个实例设置了一个具有相同名称的属性,那么该属性到哪里去了?

C: int 或 unsigned int 我用于指针增加的类型

c - C 中后置和前置增量运算符的奇怪行为