【发布时间】:2013-05-20 12:23:51
【问题描述】:
我正在编写一个 SCPI 解析器(作为一个库)。 lib用户的设备或应用程序功能需要能够输出多种类型的多个结果(不是混合类型,即A类型的多个结果或 B类型的多个结果)。
我首先想到了一个由执行控件传递给设备函数的 void 指针数组(如果设备函数类似于unsigned int deviceFunction (double inArg1, bool inArg2, void ** outResults);),但在这里查看几个 Q 似乎 void ptrs 不是推荐因为,当然,当我的响应格式化程序查看结果数据时,它不知道要转换为什么类型。
我研究过使用联合和结构,类似于 https://stackoverflow.com/a/3852192/1292918,但我不确定当设备函数需要报告多个结果时这是否是最佳方式。
也许我刚刚把我的想法打乱了。这样做有没有通用的方式或习惯用法?
(注意这是 C,不是 C++)
【问题讨论】:
-
有多种方法可以解决这个问题。然而,一个更大的问题是关于要返回的对象数量的已知信息。如果它足够小以至于始终可以使用最大空间量,那么使用数组(联合数组,带有另一个对象来指示类型,可能一起打包在一个结构中)是合适的。如果它很大并且变化很大,那么动态分配空间可能会更好,那么就存在调用者或被调用函数是否应该提供空间,以及哪个函数负责释放空间的问题。
-
@EricPostpischil 这是针对嵌入式环境的,因此动态分配并不是一个真正的选择——内存分配应该在编译时知道。尽管大多数 SCPI 命令将返回有限数量的结果或一两个复合结果,但拥有固定大小的数组并不是什么问题,因此可以使用最大数量的空间。感谢您的意见。
标签: c pointers void-pointers