c - 在 C 中定义数据协定的位置

标签 c

我正在开发一个 C 项目,我将在其中创建动态链接库并在可执行文件中使用它。 dll 代码函数将返回各种数据结构。定义这些的最佳位置在哪里? dll和可执行文件将使用的通用头文件?一般做法是什么?

最佳答案

你是说定义还是声明?您应该在头文件中声明它们,该文件还包含库函数的签名。调用代码定义它们(为其分配内存)。一般来说,我建议您为结构使用动态内存,除非结构非常小。

基本上有两种可能的实现方式:

  1. 在调用代码中定义一个指向数据结构的指针,在堆上为这个结构分配内存,并将这个指针传递给你的库中使用它的函数(然后返回它)
  2. 在调用代码中定义一个指向数据结构的指针,并将指向此指针的指针传递给函数。库函数为函数体中的结构分配内存,使用结构,例如用数据填充它,然后返回它。

在这两种情况下,您都必须在使用后释放数据结构。我经常提供一个库函数来释放数据结构,尤其是当我使用包含指向其中其他结构的指针的结构时。

关于c - 在 C 中定义数据协定的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57207444/

相关文章:

C. 带字符的 for 循环

c - 使用 C 的内存分配、分发和缓存 - Memcached

c - 位域的意外行为

c - 我在 Quake 源代码 (C) 中无法理解的符号

c - 将静态变量传递给函数

c - 为什么这个数组的所有剩余值都初始化为零?

python - 为 C 库创建 Python 绑定(bind)的 SWIG 问题

C++ - cstyle 结构/类包装相关吗?

c++ - Valgrind 堆栈完全错过了一个函数

Apache HTTP : binding an external C library with I/O methods 的自定义模块