c - 返回一个列表作为数据结构契约

标签 c data-structures shared-libraries

我正在开发一个可以被其他 C 程序使用的共享库(又名 dll)实现。作为数据契约,我希望能够从我的方法之一返回可变长度的列表。比如说,我希望返回的结构是 my_data_type,我应该将什么作为合约数据结构?

我可以想到这样的事情:

struct data_type_list
{
    my_data_type* data_list;
    int count;
};

消费者知道列表中有 count 个元素,并且消费者在 data_list[count-1] 处终止数组。

还有其他想法吗?

最佳答案

这实际上取决于您的图书馆的用户如何利用返回的数据。如果数据几乎是只读的(从某种意义上说,用户不想写入它,而只是迭代 data_type_list.data_list 指向的每个元素,我可能会采用您的解决方案)。如果用户想要进行大量修改,例如添加或删除数据,链表将是首选的数据结构,我认为:

/* example of a node in a singly-linked list */
struct list_node {
    void *data;
    struct list_node *next;
}

NULL 指针指示列表的末尾,而可以使用每个节点的 data 成员来访问数据。当然,您也可以添加一个指向前一个节点的 struct list_node *prev 成员(产生双向链表)。

关于c - 返回一个列表作为数据结构契约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57258906/

相关文章:

c - 解析二维字符数组

python - 直接修改二进制可执行文件而不损坏它的可能性

java - Hibernate:父子关系数据结构

c++ - 在 Linux 中使用 gcc 4.1 编译的 C++03 应用程序中使用 C++11 共享库?

Linux ELF - 为什么正常链接运行速度比 'ldd -r' 更快?

c++ - 负的 dwLowDateTime 在 FILETIME 结构中意味着什么?

c - 下面的代码有什么问题?(在c中的文件管理中)

C++ 数据成员对齐和数组打包

algorithm - 除了替代哈希码字符串生成之外,Google 的 CityHash 有什么用?

c++ - 动态加载类的静态成员变量