【发布时间】:2012-02-02 11:13:57
【问题描述】:
虽然它非常方便,但我很少遇到在 C 中返回 structs(或 unions)的函数,无论它们是动态链接函数还是静态定义函数。
他们改为通过指针参数返回数据。
(Windows 中的一个动态示例是GetSystemInfo。)
这背后的原因是什么?
是因为性能问题、ABI 兼容性问题还是其他原因?
【问题讨论】:
-
请澄清一下,您只是问为什么函数通常不返回结构(或者您是在问为什么程序员选择不返回指向结构的指针,而是使用带有结构指针的参数)。
-
我看到它广泛使用(并使用它)的一个情况是,当我们有一个专有系统,它有自己的编程语言,支持函数的多个返回值,例如,而不是
ptr_buf = malloc(size_t_required)它有allocate(int_size_required:ptr_buf,int_size_actually_allocated)。系统 API 也有 C 绑定,返回多个值的函数的 C 绑定总是返回结构。除了手动为每个函数定义(和命名)不同的结构非常繁琐之外,这并没有造成特别的问题。