我正在开发一个 C 项目,我将在其中创建动态链接库并在可执行文件中使用它。 dll 代码函数将返回各种数据结构。定义这些的最佳位置在哪里? dll和可执行文件将使用的通用头文件?一般做法是什么?
最佳答案
你是说定义还是声明?您应该在头文件中声明它们,该文件还包含库函数的签名。调用代码定义它们(为其分配内存)。一般来说,我建议您为结构使用动态内存,除非结构非常小。
基本上有两种可能的实现方式:
- 在调用代码中定义一个指向数据结构的指针,在堆上为这个结构分配内存,并将这个指针传递给你的库中使用它的函数(然后返回它)
- 在调用代码中定义一个指向数据结构的指针,并将指向此指针的指针传递给函数。库函数为函数体中的结构分配内存,使用结构,例如用数据填充它,然后返回它。
在这两种情况下,您都必须在使用后释放数据结构。我经常提供一个库函数来释放数据结构,尤其是当我使用包含指向其中其他结构的指针的结构时。
关于c - 在 C 中定义数据协定的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57207444/